package com.webank.openledger.contracts;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import com.webank.openledger.core.common.BaseAsset;

import org.fisco.bcos.sdk.abi.FunctionEncoder;
import org.fisco.bcos.sdk.abi.FunctionReturnDecoder;
import org.fisco.bcos.sdk.abi.TypeReference;
import org.fisco.bcos.sdk.abi.datatypes.Address;
import org.fisco.bcos.sdk.abi.datatypes.Bool;
import org.fisco.bcos.sdk.abi.datatypes.DynamicArray;
import org.fisco.bcos.sdk.abi.datatypes.DynamicBytes;
import org.fisco.bcos.sdk.abi.datatypes.Event;
import org.fisco.bcos.sdk.abi.datatypes.Function;
import org.fisco.bcos.sdk.abi.datatypes.Type;
import org.fisco.bcos.sdk.abi.datatypes.Utf8String;
import org.fisco.bcos.sdk.abi.datatypes.generated.Bytes32;
import org.fisco.bcos.sdk.abi.datatypes.generated.Int256;
import org.fisco.bcos.sdk.abi.datatypes.generated.StaticArray2;
import org.fisco.bcos.sdk.abi.datatypes.generated.StaticArray4;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint256;
import org.fisco.bcos.sdk.abi.datatypes.generated.Uint8;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple3;
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple5;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.contract.Contract;
import org.fisco.bcos.sdk.crypto.CryptoSuite;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.eventsub.EventCallback;
import org.fisco.bcos.sdk.model.CryptoType;
import org.fisco.bcos.sdk.model.TransactionReceipt;
import org.fisco.bcos.sdk.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class Currency extends Contract implements BaseAsset {
    public static final String[] BINARY_ARRAY = {"60806040526040805190810160405280600681526020017f7075626c69630000000000000000000000000000000000000000000000000000815250600090805190602001906200005192919062001228565b506040805190810160405280600581526020017f6f776e6572000000000000000000000000000000000000000000000000000000815250600190805190602001906200009f92919062001228565b506040805190810160405280600581526020017f61646d696e00000000000000000000000000000000000000000000000000000081525060029080519060200190620000ed92919062001228565b506040805190810160405280600281526020017f5f72000000000000000000000000000000000000000000000000000000000000815250600390805190602001906200013b92919062001228565b506040805190810160405280600281526020017f5f77000000000000000000000000000000000000000000000000000000000000815250600490805190602001906200018992919062001228565b506040805190810160405280600381526020017f616c6c000000000000000000000000000000000000000000000000000000000081525060059080519060200190620001d792919062001228565b506040805190810160405280600281526020017f6964000000000000000000000000000000000000000000000000000000000000815250600690805190602001906200022592919062001228565b506040805190810160405280600481526020017f6164647200000000000000000000000000000000000000000000000000000000815250600790805190602001906200027392919062001228565b506040805190810160405280600481526020017f747970650000000000000000000000000000000000000000000000000000000081525060089080519060200190620002c192919062001228565b506040805190810160405280600481526020017f726f6c6500000000000000000000000000000000000000000000000000000000815250600990805190602001906200030f92919062001228565b506040805190810160405280600781526020017f7075625f6b657900000000000000000000000000000000000000000000000000815250600a90805190602001906200035d92919062001228565b506040805190810160405280600481526020017f6461746100000000000000000000000000000000000000000000000000000000815250600b9080519060200190620003ab92919062001228565b506040805190810160405280600681526020017f726f6c655f720000000000000000000000000000000000000000000000000000815250600c9080519060200190620003f992919062001228565b506040805190810160405280600681526020017f726f6c655f770000000000000000000000000000000000000000000000000000815250600d90805190602001906200044792919062001228565b506040805190810160405280600c81526020017f6f70656e696e675f62616e6b0000000000000000000000000000000000000000815250600e90805190602001906200049592919062001228565b506040805190810160405280600681526020017f6173736574730000000000000000000000000000000000000000000000000000815250600f9080519060200190620004e392919062001228565b506040805190810160405280600781526020017f62616c616e636500000000000000000000000000000000000000000000000000815250601090805190602001906200053192919062001228565b506040805190810160405280600681526020017f7265636f72640000000000000000000000000000000000000000000000000000815250601190805190602001906200057f92919062001228565b506040805190810160405280600581526020017f61646d696e00000000000000000000000000000000000000000000000000000081525060129080519060200190620005cd92919062001228565b506040805190810160405280600881526020017f6f70657261746f72000000000000000000000000000000000000000000000000815250601390805190602001906200061b92919062001228565b506040805190810160405280600581526020017f6f776e6572000000000000000000000000000000000000000000000000000000815250601490805190602001906200066992919062001228565b506040805190810160405280600481526020017f757365720000000000000000000000000000000000000000000000000000000081525060159080519060200190620006b792919062001228565b5062010001601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062010002601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062010003601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062010004601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620007d557600080fd5b50604051620111bd380380620111bd8339810180604052620007fb919081019062001575565b84828281816060620008373073ffffffffffffffffffffffffffffffffffffffff1662000dd064010000000002620078b4176401000000009004565b9050620008fd60068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620008d75780601f10620008ab57610100808354040283529160200191620008d7565b820191906000526020600020905b815481529060010190602001808311620008b957829003601f168201915b505050505082601b62000eb4640100000000026200634417909291906401000000009004565b5082601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b3032be86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620009c657600080fd5b505af1158015620009db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000a01919081019062001549565b601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c55fc52d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801562000ac857600080fd5b505af115801562000add573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000b03919081019062001549565b602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151562000bc15781601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000c03565b30601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050506000835111801562000c19575060408351105b151562000c5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c54906200188f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663af0680206040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801562000cc257600080fd5b505af115801562000cd7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000cfd919081019062001549565b838262000d09620012af565b62000d17939291906200184b565b604051809103906000f08015801562000d34573d6000803e3d6000fd5b50602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050846028908051906020019062000d90929190620012c0565b50836027908051906020019062000da9929190620012c0565b5082602960006101000a81548160ff021916908360ff1602179055505050505050620019d3565b6060600080836c0100000000000000000000000002915060146040519080825280601f01601f19166020018201604052801562000e1c5781602001602082028038833980820191505090505b509250600090505b601481101562000ead57818160148110151562000e3d57fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002838281518110151562000e6f57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505062000e24565b5050919050565b60008084600001846040518082805190602001908083835b60208310151562000ef3578051825260208201915060208101905060208303925062000ecc565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000015490506000811115620010b0577f77da9cffaff6366f6be90a928ae84ae14a77d3138ce236f9481aa71d15a9c47c32336040805190810160405280600681526020017f4d4f4449465900000000000000000000000000000000000000000000000000008152508789600001896040518082805190602001908083835b60208310151562000fcc578051825260208201915060208101905060208303925062000fa5565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020","60010160405162001015959493929190620017d9565b60405180910390a18285600001856040518082805190602001908083835b6020831015156200105a578051825260208201915060208101905060208303925062001033565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001019080519060200190620010a592919062001347565b506001915062001220565b8285600001856040518082805190602001908083835b602083101515620010ed5780518252602082019150602081019050602083039250620010c6565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060010190805190602001906200113892919062001347565b50846001018054809190600101620011519190620013ce565b90506001810185600001856040518082805190602001908083835b6020831015156200119357805182526020820191506020810190506020830392506200116c565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000181905550838560010182815481101515620011e057fe5b906000526020600020906002020160000190805190602001906200120692919062001347565b508460020160008154809291906001019190505550600091505b509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200126b57805160ff19168380011785556200129c565b828001600101855582156200129c579182015b828111156200129b5782518255916020019190600101906200127e565b5b509050620012ab919062001403565b5090565b604051615936806200b88783390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200130357805160ff191683800117855562001334565b8280016001018555821562001334579182015b828111156200133357825182559160200191906001019062001316565b5b50905062001343919062001403565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200138a57805160ff1916838001178555620013bb565b82800160010185558215620013bb579182015b82811115620013ba5782518255916020019190600101906200139d565b5b509050620013ca919062001403565b5090565b815481835581811115620013fe57600202816002028360005260206000209182019101620013fd91906200142b565b5b505050565b6200142891905b80821115620014245760008160009055506001016200140a565b5090565b90565b6200147091905b808211156200146c57600080820160006200144e919062001473565b6001820160006101000a81549060ff02191690555060020162001432565b5090565b90565b50805460018160011615610100020316600290046000825580601f106200149b5750620014bc565b601f016020900490600052602060002090810190620014bb919062001403565b5b50565b6000620014cd82516200195f565b905092915050565b600082601f8301121515620014e957600080fd5b815162001500620014fa82620018df565b620018b1565b915080825260208301602083018583830111156200151d57600080fd5b6200152a8382846200198c565b50505092915050565b60006200154182516200197f565b905092915050565b6000602082840312156200155c57600080fd5b60006200156c84828501620014bf565b91505092915050565b600080600080600060a086880312156200158e57600080fd5b600086015167ffffffffffffffff811115620015a957600080fd5b620015b788828901620014d5565b955050602086015167ffffffffffffffff811115620015d557600080fd5b620015e388828901620014d5565b9450506040620015f68882890162001533565b93505060606200160988828901620014bf565b92505060806200161c88828901620014bf565b9150509295509295909350565b62001634816200193f565b82525050565b6000620016478262001929565b8084526200165d8160208601602086016200198c565b6200166881620019c2565b602085010191505092915050565b600062001683826200191e565b808452620016998160208601602086016200198c565b620016a481620019c2565b602085010191505092915050565b600081546001811660008114620016d25760018114620016f35762001738565b607f600283041680865260ff19831660208701526040860193505062001738565b600282048086526020860195506200170b856200190c565b60005b828110156200172f578154818901526001820191506020810190506200170e565b80880195505050505b505092915050565b60006200174d8262001934565b808452620017638160208601602086016200198c565b6200176e81620019c2565b602085010191505092915050565b6000603282527f61737365744e616d652073686f756c64206265206e6f74206e756c6c20616e6460208301527f206c657373207468616e203634206c6f6e6700000000000000000000000000006040830152606082019050919050565b600060a082019050620017f0600083018862001629565b620017ff602083018762001629565b818103604083015262001813818662001676565b905081810360608301526200182981856200163a565b905081810360808301526200183f8184620016b2565b90509695505050505050565b600060608201905062001862600083018662001629565b818103602083015262001876818562001740565b905062001887604083018462001629565b949350505050565b60006020820190508181036000830152620018aa816200177c565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620018d557600080fd5b8060405250919050565b600067ffffffffffffffff821115620018f757600080fd5b601f19601f8301169050602081019050919050565b60008160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060ff82169050919050565b60005b83811015620019ac5780820151818401526020810190506200198f565b83811115620019bc576000848401525b50505050565b6000601f19601f8301169050919050565b619ea480620019e36000396000f3006080604052600436106102a9576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301db8d89146102ae57806303ba71eb146102d957806306fdde0314610304578063081f93391461032f5780630c0fd8861461035a5780630feca68a14610385578063117803e3146103b057806315e9977e146103db5780631dedfd471461040657806320ba5b601461044457806323a772bd1461048157806326bca089146104ac578063283d26ca146104e95780632a0acc6a146105145780632ef8cb1c1461053f578063313ce5671461056a57806338cc48311461059557806339151753146105c05780633a0e6174146105eb5780633b007d8e14610616578063403c6cfa146106535780635262e2a11461069057806357872d13146106bb57806358edef4c146106e6578063632e1dfe14610723578063699cc7f11461074e5780636adc4165146107795780637bdd20b2146107a457806381e167cf146107e15780638662acad1461080c57806390023f9514610849578063949d225d1461088757806395d89b41146108b2578063983d2737146108dd57806399f2592a146109085780639d53fe2b14610946578063a0997a5814610971578063a18c751e146109ae578063ac44522e146109eb578063b11569f514610a28578063b1c5afa714610a53578063b3032be814610a90578063b3cea21714610abb578063b4eb5ede14610ae6578063b85a290114610b11578063bb1239c314610b3c578063bb24fe8a14610b67578063c28304aa14610b92578063c55fc52d14610bbd578063cb6163ad14610be8578063cd2f381a14610c25578063d087d28814610c63578063d6d7d52514610c8e578063e077fef914610ccb578063e8c2553a14610d08578063ef966c8914610d45578063f307b32c14610d82575b600080fd5b3480156102ba57600080fd5b506102c3610dad565b6040516102d0919061968b565b60405180910390f35b3480156102e557600080fd5b506102ee610e4b565b6040516102fb919061968b565b60405180910390f35b34801561031057600080fd5b50610319610ee9565b6040516103269190619706565b60405180910390f35b34801561033b57600080fd5b50610344610f87565b604051610351919061968b565b60405180910390f35b34801561036657600080fd5b5061036f611025565b60405161037c919061968b565b60405180910390f35b34801561039157600080fd5b5061039a6110c3565b6040516103a79190619a4a565b60405180910390f35b3480156103bc57600080fd5b506103c56110e9565b6040516103d2919061968b565b60405180910390f35b3480156103e757600080fd5b506103f0611187565b6040516103fd919061968b565b60405180910390f35b34801561041257600080fd5b5061042d6004803603610428919081019061814e565b611225565b60405161043b929190619662565b60405180910390f35b34801561045057600080fd5b5061046b6004803603610466919081019061841d565b611264565b6040516104789190619617565b60405180910390f35b34801561048d57600080fd5b50610496611462565b6040516104a3919061968b565b60405180910390f35b3480156104b857600080fd5b506104d360048036036104ce9190810190618278565b611500565b6040516104e091906195a9565b60405180910390f35b3480156104f557600080fd5b506104fe611e57565b60405161050b919061968b565b60405180910390f35b34801561052057600080fd5b50610529611ef5565b604051610536919061968b565b60405180910390f35b34801561054b57600080fd5b50610554611f93565b604051610561919061968b565b60405180910390f35b34801561057657600080fd5b5061057f612031565b60405161058c9190619ab8565b60405180910390f35b3480156105a157600080fd5b506105aa612044565b6040516105b79190619098565b60405180910390f35b3480156105cc57600080fd5b506105d561204c565b6040516105e2919061968b565b60405180910390f35b3480156105f757600080fd5b506106006120ea565b60405161060d919061968b565b60405180910390f35b348015610622","57600080fd5b5061063d6004803603610638919081019061841d565b612188565b60405161064a9190619617565b60405180910390f35b34801561065f57600080fd5b5061067a6004803603610675919081019061820e565b612386565b6040516106879190619a4a565b60405180910390f35b34801561069c57600080fd5b506106a5612699565b6040516106b29190619098565b60405180910390f35b3480156106c757600080fd5b506106d06126c3565b6040516106dd919061968b565b60405180910390f35b3480156106f257600080fd5b5061070d60048036036107089190810190618388565b612761565b60405161071a9190619617565b60405180910390f35b34801561072f57600080fd5b5061073861295c565b6040516107459190619098565b60405180910390f35b34801561075a57600080fd5b50610763612982565b604051610770919061968b565b60405180910390f35b34801561078557600080fd5b5061078e612a20565b60405161079b9190619098565b60405180910390f35b3480156107b057600080fd5b506107cb60048036036107c691908101906183c9565b612a46565b6040516107d89190619617565b60405180910390f35b3480156107ed57600080fd5b506107f6612c69565b604051610803919061968b565b60405180910390f35b34801561081857600080fd5b50610833600480360361082e91908101906183c9565b612d07565b60405161084091906196ad565b60405180910390f35b34801561085557600080fd5b50610870600480360361086b919081019061814e565b612f29565b60405161087e929190619662565b60405180910390f35b34801561089357600080fd5b5061089c613305565b6040516108a99190619a4a565b60405180910390f35b3480156108be57600080fd5b506108c7613316565b6040516108d49190619706565b60405180910390f35b3480156108e957600080fd5b506108f26133b4565b6040516108ff919061968b565b60405180910390f35b34801561091457600080fd5b5061092f600480360361092a919081019061814e565b613452565b60405161093d929190619662565b60405180910390f35b34801561095257600080fd5b5061095b6139f5565b604051610968919061968b565b60405180910390f35b34801561097d57600080fd5b5061099860048036036109939190810190618095565b613a93565b6040516109a59190619a4a565b60405180910390f35b3480156109ba57600080fd5b506109d560048036036109d0919081019061841d565b613e84565b6040516109e29190619617565b60405180910390f35b3480156109f757600080fd5b50610a126004803603610a0d9190810190618489565b614082565b604051610a1f9190619617565b60405180910390f35b348015610a3457600080fd5b50610a3d6142ba565b604051610a4a9190619098565b60405180910390f35b348015610a5f57600080fd5b50610a7a6004803603610a75919081019061820e565b6142e0565b604051610a879190619a4a565b60405180910390f35b348015610a9c57600080fd5b50610aa56145e7565b604051610ab29190619098565b60405180910390f35b348015610ac757600080fd5b50610ad06146ac565b604051610add919061968b565b60405180910390f35b348015610af257600080fd5b50610afb61474a565b604051610b08919061968b565b60405180910390f35b348015610b1d57600080fd5b50610b266147e8565b604051610b33919061968b565b60405180910390f35b348015610b4857600080fd5b50610b51614886565b604051610b5e9190619098565b60405180910390f35b348015610b7357600080fd5b50610b7c6148ac565b604051610b89919061968b565b60405180910390f35b348015610b9e57600080fd5b50610ba761494a565b604051610bb49190619098565b60405180910390f35b348015610bc957600080fd5b50610bd2614974565b604051610bdf9190619098565b60405180910390f35b348015610bf457600080fd5b50610c0f6004803603610c0a9190810190618489565b614a39565b604051610c1c9190619617565b60405180910390f35b348015610c3157600080fd5b50610c4c6004803603610c47919081019061810d565b614c71565b604051610c5a929190619632565b60405180910390f35b348015610c6f57600080fd5b50610c78614ef5565b604051610c859190619a4a565b60405180910390f35b348015610c9a57600080fd5b50610cb56004803603610cb09190810190618388565b614eff565b604051610cc291906196ad565b60405180910390f35b348015610cd757600080fd5b50610cf26004803603610ced919081019061820e565b6150fa565b604051610cff919061952d565b60405180910390f35b348015610d1457600080fd5b50610d2f6004803603610d2a9190810190618489565b6154f7565b604051610d3c9190619617565b60405180910390f35b348015610d5157600080fd5b50610d6c6004803603610d679190810190618095565b61572f565b604051610d799190619617565b60405180910390f35b348015610d8e57600080fd5b50610d97615e5f565b604051610da4919061968b565b60405180910390f35b600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e435780601f10610e1857610100808354040283529160200191610e43565b820191906000526020600020905b815481529060010190602001808311610e2657829003601f168201915b505050505081565b600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ee15780601f10610eb657610100808354040283529160200191610ee1565b820191906000526020600020905b815481529060010190602001808311610ec457829003601f168201915b505050505081565b60288054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f7f5780601f10610f5457610100808354040283529160200191610f7f565b820191906000526020600020905b815481529060010190602001808311610f6257829003601f168201915b505050505081565b600d8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b505050505081565b600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110bb5780601f10611090576101008083540402835291602001916110bb565b820191906000526020600020905b81548152906001019060200180831161109e57829003601f168201915b505050505081565b60006110db6001602154615efd90919063ffffffff16565b602181905550602154905090565b60148054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561117f5780601f106111545761010080835404028352916020019161117f565b820191906000526020600020905b81548152906001019060200180831161116257829003601f168201915b505050505081565b60108054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561121d5780601f106111f25761010080835404028352916020019161121d565b820191906000526020600020905b81548152906001019060200180831161120057829003601f168201915b505050505081565b600061122f6179f3565b602960009054906101000a900460ff1660ff16600a0a860295506112568787878787615f54565b915091509550959350505050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337258c0d33601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061137660048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113625780601f1061133757610100808354040283529160200191611362565b820191906000526020600020905b81548152906001019060200180831161134557829003601f168201915b50505050508961633090919063ffffffff16565b6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016113b194939291906190b3565b602060405180830381600087803b1580156113cb57600080fd5b505af11580156113df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114039190810190618323565b1515611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b9061994a565b60405180910390fd5b61145a8383601b6163449092919063ffffffff16565b905092915050565b60118054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114f85780601f106114cd576101008083540402835291602001916114f8565b820191906000526020600020905b8154815290600101906020018083116114db57829003601f168201915b505050505081565b6060806000806000806060600080601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04d4ef3601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16308b8e6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016115ad94939291906193e4565b6040805180830381600087803b1580156115c657600080fd5b505af11580156115da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115fe91908101906180d1565b8097508198505050851515611648576040517f08c379a000000000000000","000000000000000000000000000000000000000000815260040161163f906197ca565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369921c26886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016116bf9190619098565b602060405180830381600087803b1580156116d957600080fd5b505af11580156116ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117119190810190618323565b1515611752576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117499061982a565b60405180910390fd5b60028b5114801561179257508a600181518110151561176d57fe5b906020019060200201518b600081518110151561178657fe5b90602001906020020151125b15156117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca906198aa565b60405180910390fd5b60008c51111561184d57600093505b8b5184101561184c578b848151811015156117f957fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561183f576001945061184c565b83806001019450506117e2565b5b84151561192057601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634768e049886040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016118cb9190619098565b602060405180830381600087803b1580156118e557600080fd5b505af11580156118f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061191d9190810190618323565b94505b841515611962576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119599061974a565b60405180910390fd5b6000602380549050141561197857829850611e47565b60008c511180156119ce5750600073ffffffffffffffffffffffffffffffffffffffff168c60008151811015156119ab57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b15611b7557601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3793a618d6000815181101515611a2057fe5b906020019060200201516040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611a629190619098565b602060405180830381600087803b158015611a7c57600080fd5b505af1158015611a90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611ab4919081019061806c565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f906197aa565b60405180910390fd5b818c6000815181101515611b3857fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b60018c51118015611bcb5750600073ffffffffffffffffffffffffffffffffffffffff168c6001815181101515611ba857fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b15611d7257601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3793a618d6001815181101515611c1d57fe5b906020019060200201516040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611c5f9190619098565b602060405180830381600087803b158015611c7957600080fd5b505af1158015611c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611cb1919081019061806c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c9061998a565b60405180910390fd5b808c6001815181101515611d3557fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663521ae5368e8e8e6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611ded939291906195cb565b600060405180830381600087803b158015611e0757600080fd5b505af1158015611e1b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250611e449190810190618237565b98505b5050505050505050949350505050565b600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611eed5780601f10611ec257610100808354040283529160200191611eed565b820191906000526020600020905b815481529060010190602001808311611ed057829003601f168201915b505050505081565b60128054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f8b5780601f10611f6057610100808354040283529160200191611f8b565b820191906000526020600020905b815481529060010190602001808311611f6e57829003601f168201915b505050505081565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120295780601f10611ffe57610100808354040283529160200191612029565b820191906000526020600020905b81548152906001019060200180831161200c57829003601f168201915b505050505081565b602960009054906101000a900460ff1681565b600030905090565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120e25780601f106120b7576101008083540402835291602001916120e2565b820191906000526020600020905b8154815290600101906020018083116120c557829003601f168201915b505050505081565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121805780601f1061215557610100808354040283529160200191612180565b820191906000526020600020905b81548152906001019060200180831161216357829003601f168201915b505050505081565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337258c0d33601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061229a60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122865780601f1061225b57610100808354040283529160200191612286565b820191906000526020600020905b81548152906001019060200180831161226957829003601f168201915b50505050508961633090919063ffffffff16565b6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016122d594939291906190b3565b602060405180830381600087803b1580156122ef57600080fd5b505af1158015612303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123279190810190618323565b1515612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90619a2a565b60405180910390fd5b61237e8383601b6166a19092919063ffffffff16565b905092915050565b60006060600080601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04d4ef3601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163086896040518563ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161242c9493929190619384565b6040805180830381600087803b15801561244557600080fd5b505af1158015612459573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061247d91908101906180d1565b80925081935050508015156124c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124be9061976a565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369921c26836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161253e9190619098565b602060405180830381600087803b15801561255857600080fd5b505af115801561256c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125909190810190618323565b15156125d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c89061982a565b60405180910390fd5b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e953d0af6040518163ffffffff167c0100","000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561265757600080fd5b505af115801561266b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061268f9190810190618508565b9350505050919050565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127595780601f1061272e57610100808354040283529160200191612759565b820191906000526020600020905b81548152906001019060200180831161273c57829003601f168201915b505050505081565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337258c0d33601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061287360048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561285f5780601f106128345761010080835404028352916020019161285f565b820191906000526020600020905b81548152906001019060200180831161284257829003601f168201915b50505050508861633090919063ffffffff16565b6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016128ae94939291906190b3565b602060405180830381600087803b1580156128c857600080fd5b505af11580156128dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129009190810190618323565b1515612941576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129389061984a565b60405180910390fd5b61295582601b61689690919063ffffffff16565b9050919050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612a185780601f106129ed57610100808354040283529160200191612a18565b820191906000526020600020905b8154815290600101906020018083116129fb57829003601f168201915b505050505081565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060600080612a60868461633090919063ffffffff16565b9250601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04d4ef3601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630612b7160048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b5d5780601f10612b3257610100808354040283529160200191612b5d565b820191906000526020600020905b815481529060010190602001808311612b4057829003601f168201915b50505050508b61633090919063ffffffff16565b878a6040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612baf959493929190619260565b6040805180830381600087803b158015612bc857600080fd5b505af1158015612bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c0091908101906180d1565b8092508193505050801515612c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c419061984a565b60405180910390fd5b612c5e86601b61689690919063ffffffff16565b935050505092915050565b60158054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612cff5780601f10612cd457610100808354040283529160200191612cff565b820191906000526020600020905b815481529060010190602001808311612ce257829003601f168201915b505050505081565b606080600080612d20868461633090919063ffffffff16565b9250601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04d4ef3601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630612e3160038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e1d5780601f10612df257610100808354040283529160200191612e1d565b820191906000526020600020905b815481529060010190602001808311612e0057829003601f168201915b50505050508b61633090919063ffffffff16565b878a6040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612e6f959493929190619260565b6040805180830381600087803b158015612e8857600080fd5b505af1158015612e9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ec091908101906180d1565b8092508193505050801515612f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f01906198ea565b60405180910390fd5b612f1e86601b616ae890919063ffffffff16565b935050505092915050565b6000612f336179f3565b600060606000612f416179f3565b612f848b8b8b8b8b6040805190810160405280600a81526020017f7769746864726177616c00000000000000000000000000000000000000000000815250616bfb565b9a508a6002815181101515612f9557fe5b906020019060200201519350602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561302f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613026906198ca565b60405180910390fd5b6130818a602560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054616e0890919063ffffffff16565b602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026040519080825280602002602001820160405280156130f45781602001602082028038833980820191505090505b509250600183600081518110151561310857fe5b906020019060200201818152505088600081518110151561312557fe5b9060200190602002015183600181518110151561313e57fe5b90602001906020020181815250507fb6e26e54bd578616699ab07efb4c2e322b45a80673803bbb259443d9fecee652848b60405161317d929190619504565b60405180910390a1602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318d6f1718c8c8b876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401613202949392919061954f565b606060405180830381600087803b15801561321c57600080fd5b505af1158015613230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613254919081019061834c565b80925081935050507f6acb627e94f15db3e6d10b82668ddd36dc340d2d921352d5e3a166bc08babada81600060028110151561328c57fe5b60200201518260016002811015156132a057fe5b60200201518d60028151811015156132b457fe5b906020019060200201518e60038151811015156132cd57fe5b906020019060200201518e6040516132e9959493929190619a65565b60405180910390a1818195509550505050509550959350505050565b6000613311601b616e5f565b905090565b60278054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133ac5780601f10613381576101008083540402835291602001916133ac565b820191906000526020600020905b81548152906001019060200180831161338f57829003601f168201915b505050505081565b60138054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561344a5780601f1061341f5761010080835404028352916020019161344a565b820191906000526020600020905b81548152906001019060200180831161342d57829003601f168201915b505050505081565b600061345c6179f3565b606060006134686179f3565b6134ab8a8a8a8a8a6040805190810160405280600881526020017f7472616e73666572000000000000000000000000000000000000000000000000815250616e6d565b9950602460008b60028151811015156134c057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515613553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161354a906198ca565b60405180910390fd5b602460008b600381518110151561356657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156135f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f0906198ca565b60405180910390fd5b61366389602560008d600281518110151561361057fe5b9060200190602002015173ff","ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054616e0890919063ffffffff16565b602560008c600281518110151561367657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061372889602560008d60038151811015156136d557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054615efd90919063ffffffff16565b602560008c600381518110151561373b57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026040519080825280602002602001820160405280156137b35781602001602082028038833980820191505090505b50925060028360008151811015156137c757fe5b90602001906020020181815250508760008151811015156137e457fe5b906020019060200201518360018151811015156137fd57fe5b90602001906020020181815250507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a600281518110151561383b57fe5b906020019060200201518b600381518110151561385457fe5b906020019060200201518b60405161386e93929190619229565b60405180910390a1602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318d6f1718b8b8a876040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016138f3949392919061954f565b606060405180830381600087803b15801561390d57600080fd5b505af1158015613921573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613945919081019061834c565b80925081935050507f6acb627e94f15db3e6d10b82668ddd36dc340d2d921352d5e3a166bc08babada81600060028110151561397d57fe5b602002015182600160028110151561399157fe5b60200201518c60028151811015156139a557fe5b906020019060200201518d60038151811015156139be57fe5b906020019060200201518d6040516139da959493929190619a65565b60405180910390a18181945094505050509550959350505050565b60098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613a8b5780601f10613a6057610100808354040283529160200191613a8b565b820191906000526020600020905b815481529060010190602001808311613a6e57829003601f168201915b505050505081565b6000806060600080601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3793a61886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401613b129190619098565b602060405180830381600087803b158015613b2c57600080fd5b505af1158015613b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613b64919081019061806c565b9350602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515613bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613beb906198ca565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04d4ef3601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686868a6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401613c9394939291906191c9565b6040805180830381600087803b158015613cac57600080fd5b505af1158015613cc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613ce491908101906180d1565b8092508193505050801515613d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2590619a0a565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369921c26836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401613da59190619098565b602060405180830381600087803b158015613dbf57600080fd5b505af1158015613dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613df79190810190618323565b1515613e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e2f9061982a565b60405180910390fd5b602560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205494505050505092915050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337258c0d33601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630613f9660048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613f825780601f10613f5757610100808354040283529160200191613f82565b820191906000526020600020905b815481529060010190602001808311613f6557829003601f168201915b50505050508961633090919063ffffffff16565b6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401613fd194939291906190b3565b602060405180830381600087803b158015613feb57600080fd5b505af1158015613fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506140239190810190618323565b1515614064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161405b9061978a565b60405180910390fd5b61407a8383601b6170929092919063ffffffff16565b905092915050565b600060606000806140ae866140a0898661633090919063ffffffff16565b61633090919063ffffffff16565b9250601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04d4ef3601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306141bf60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156141ab5780601f10614180576101008083540402835291602001916141ab565b820191906000526020600020905b81548152906001019060200180831161418e57829003601f168201915b50505050508c61633090919063ffffffff16565b878a6040518663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016141fd959493929190619260565b6040805180830381600087803b15801561421657600080fd5b505af115801561422a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061424e91908101906180d1565b8092508193505050801515614298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161428f90619a2a565b60405180910390fd5b6142ae8787601b6166a19092919063ffffffff16565b93505050509392505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060600080600080601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04d4ef3601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630888b6040518563ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161438994939291906194a4565b6040805180830381600087803b1580156143a257600080fd5b505af11580156143b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506143da91908101906180d1565b8094508195505050821515614424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161441b9061992a565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369921c26856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161449b9190619098565b602060405180830381600087803b1580156144b557600080fd5b505af11580156144c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506144ed9190810190618323565b151561452e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145259061982a565b60405180910390fd5b600090505b6023805490508110156145da576145cb6025600060238481548110151561455657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483615efd90919063ffffffff16565b91508080600101915050614533565b8195505050505050919050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff","ffffffffff1663b3032be86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561466f57600080fd5b505af1158015614683573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506146a7919081019061806c565b905090565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156147425780601f1061471757610100808354040283529160200191614742565b820191906000526020600020905b81548152906001019060200180831161472557829003601f168201915b505050505081565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156147e05780601f106147b5576101008083540402835291602001916147e0565b820191906000526020600020905b8154815290600101906020018083116147c357829003601f168201915b505050505081565b60008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561487e5780601f106148535761010080835404028352916020019161487e565b820191906000526020600020905b81548152906001019060200180831161486157829003601f168201915b505050505081565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156149425780601f1061491757610100808354040283529160200191614942565b820191906000526020600020905b81548152906001019060200180831161492557829003601f168201915b505050505081565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c55fc52d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156149fc57600080fd5b505af1158015614a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250614a34919081019061806c565b905090565b60006060600080614a6586614a57898661633090919063ffffffff16565b61633090919063ffffffff16565b9250601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04d4ef3601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630614b7660048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015614b625780601f10614b3757610100808354040283529160200191614b62565b820191906000526020600020905b815481529060010190602001808311614b4557829003601f168201915b50505050508c61633090919063ffffffff16565b878a6040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401614bb4959493929190619260565b6040805180830381600087803b158015614bcd57600080fd5b505af1158015614be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250614c0591908101906180d1565b8092508193505050801515614c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614c469061994a565b60405180910390fd5b614c658787601b6163449092919063ffffffff16565b93505050509392505050565b600060608060008060008651604051908082528060200260200182016040528015614cab5781602001602082028038833980820191505090505b509350600090505b8651811015614ee5576001811480614d26575060058751148015614cd75750600481145b80614d2557508681815181101515614ceb57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff16145b5b15614d92578681815181101515614d3957fe5b906020019060200201518482815181101515614d5157fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614ed8565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663accfbdd98883815181101515614dde57fe5b906020019060200201516040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401614e209190619098565b6040805180830381600087803b158015614e3957600080fd5b505af1158015614e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250614e7191908101906180d1565b8094508193505050821515614e8c5760008495509550614eec565b818482815181101515614e9b57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b8080600101915050614cb3565b8284955095505b50505050915091565b6000602154905090565b6060601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337258c0d33601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061501160038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015614ffd5780601f10614fd257610100808354040283529160200191614ffd565b820191906000526020600020905b815481529060010190602001808311614fe057829003601f168201915b50505050508861633090919063ffffffff16565b6040518563ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161504c94939291906190b3565b602060405180830381600087803b15801561506657600080fd5b505af115801561507a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061509e9190810190618323565b15156150df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016150d6906198ea565b60405180910390fd5b6150f382601b616ae890919063ffffffff16565b9050919050565b60608060008060606000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04d4ef3601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630888b6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016151a39493929190619324565b6040805180830381600087803b1580156151bc57600080fd5b505af11580156151d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506151f491908101906180d1565b809450819550505082151561523e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016152359061990a565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369921c26856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016152b59190619098565b602060405180830381600087803b1580156152cf57600080fd5b505af11580156152e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506153079190810190618323565b1515615348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161533f9061982a565b60405180910390fd5b60238054905060405190808252806020026020018201604052801561537c5781602001602082028038833980820191505090505b509150600090505b6023805490508110156154ea57601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166346438ca06023838154811015156153de57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016154419190619098565b602060405180830381600087803b15801561545b57600080fd5b505af115801561546f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250615493919081019061806c565b82828151811015156154a157fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050615384565b8195505050505050919050565b6000606060008061552386615515898661633090919063ffffffff16565b61633090919063ffffffff16565b9250601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04d4ef3601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061563460048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156156205780601f106155f557610100808354040283529160200191615620565b820191906000526020600020905b81548152906001019060200180831161560357829003601f16","8201915b50505050508c61633090919063ffffffff16565b878a6040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401615672959493929190619260565b6040805180830381600087803b15801561568b57600080fd5b505af115801561569f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506156c391908101906180d1565b809250819350505080151561570d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016157049061978a565b60405180910390fd5b6157238787601b6170929092919063ffffffff16565b93505050509392505050565b6000806060600080600087601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369921c26826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016157b19190619098565b602060405180830381600087803b1580156157cb57600080fd5b505af11580156157df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506158039190810190618323565b1515615844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161583b9061982a565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a3793a618a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016158bb9190619098565b602060405180830381600087803b1580156158d557600080fd5b505af11580156158e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061590d919081019061806c565b9550602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151561599e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615995906199aa565b60405180910390fd5b6159b1898661728f90919063ffffffff16565b9450601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04d4ef3601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630888c6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401615a529493929190619444565b6040805180830381600087803b158015615a6b57600080fd5b505af1158015615a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250615aa391908101906180d1565b8094508195505050821515615aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615ae4906199ea565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369921c26856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401615b649190619098565b602060405180830381600087803b158015615b7e57600080fd5b505af1158015615b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250615bb69190810190618323565b1515615bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615bee9061982a565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f18a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401615c6e9190619098565b602060405180830381600087803b158015615c8857600080fd5b505af1158015615c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250615cc0919081019061806c565b91508173ffffffffffffffffffffffffffffffffffffffff166395a0c79630601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401615d3e939291906196cf565b602060405180830381600087803b158015615d5857600080fd5b505af1158015615d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250615d909190810190618323565b5060238690806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506001602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001965050505050505092915050565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015615ef55780601f10615eca57610100808354040283529160200191615ef5565b820191906000526020600020905b815481529060010190602001808311615ed857829003601f168201915b505050505081565b6000808284019050838110151515615f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401615f41906197ea565b60405180910390fd5b8091505092915050565b6000615f5e6179f3565b600060606000615f6c6179f3565b615faf8b8b8b8b8b6040805190810160405280600781526020017f6465706f73697400000000000000000000000000000000000000000000000000815250616bfb565b9a508a6003815181101515615fc057fe5b906020019060200201519350602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151561605a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401616051906198ca565b60405180910390fd5b6160ac8a602560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054615efd90919063ffffffff16565b602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260405190808252806020026020018201604052801561611f5781602001602082028038833980820191505090505b509250600083600081518110151561613357fe5b906020019060200201818152505088600081518110151561615057fe5b9060200190602002015183600181518110151561616957fe5b90602001906020020181815250507fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c848b6040516161a8929190619504565b60405180910390a1602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318d6f1718c8c8b876040518563ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161622d949392919061954f565b606060405180830381600087803b15801561624757600080fd5b505af115801561625b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061627f919081019061834c565b80925081935050507f6acb627e94f15db3e6d10b82668ddd36dc340d2d921352d5e3a166bc08babada8160006002811015156162b757fe5b60200201518260016002811015156162cb57fe5b60200201518d60028151811015156162df57fe5b906020019060200201518e60038151811015156162f857fe5b906020019060200201518e604051616314959493929190619a65565b60405180910390a1818195509550505050509550959350505050565b606061633c83836172ab565b905092915050565b60008084600001846040518082805190602001908083835b602083101515616381578051825260208201915060208101905060208303925061635c565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000015490506000811115616534577f77da9cffaff6366f6be90a928ae84ae14a77d3138ce236f9481aa71d15a9c47c32336040805190810160405280600681526020017f4d4f4449465900000000000000000000000000000000000000000000000000008152508789600001896040518082805190602001908083835b6020831015156164575780518252602082019150602081019050602083039250616432565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060010160405161649e959493929190619161565b60405180910390a18285600001856040518082805190602001908083835b6020831015156164e157805182526020820191506020810190506020830392506164bc565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600101908051906020019061652a929190617a15565b5060019150616699565b8285600001856040518082805190602001908083835b60208310151561656f578051825260208201915060208101905060208303925061654a565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060010190805190602001906165b8929190617a15565b508460010180548091906001016165cf9190617a95565b90506001810185600001856040518082805190602001908083835b60208310151561660f57805182526020820191506020810190506020830392506165ea565b6001836020036101000a038019","82511681845116808217855250505050505090500191505090815260200160405180910390206000018190555083856001018281548110151561665b57fe5b9060005260206000209060020201600001908051906020019061667f929190617a15565b508460020160008154809291906001019190505550600091505b509392505050565b60008084600001846040518082805190602001908083835b6020831015156166de57805182526020820191506020810190506020830392506166b9565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000015490506000811115616729576000915061688e565b8285600001856040518082805190602001908083835b602083101515616764578051825260208201915060208101905060208303925061673f565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060010190805190602001906167ad929190617a15565b508460010180548091906001016167c49190617a95565b90506001810185600001856040518082805190602001908083835b60208310151561680457805182526020820191506020810190506020830392506167df565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000018190555083856001018281548110151561685057fe5b90600052602060002090600202016000019080519060200190616874929190617a15565b508460020160008154809291906001019190505550600191505b509392505050565b60008083600001836040518082805190602001908083835b6020831015156168d357805182526020820191506020810190506020830392506168ae565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600001549050600081141561691e5760009150616ae1565b7f77da9cffaff6366f6be90a928ae84ae14a77d3138ce236f9481aa71d15a9c47c32336040805190810160405280600681526020017f44454c45544500000000000000000000000000000000000000000000000000008152508688600001886040518082805190602001908083835b6020831015156169b2578051825260208201915060208101905060208303925061698d565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001016040516169f9959493929190619161565b60405180910390a183600001836040518082805190602001908083835b602083101515616a3b5780518252602082019150602081019050602083039250616a16565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600080820160009055600182016000616a879190617ac7565b505060018460010160018303815481101515616a9f57fe5b906000526020600020906002020160010160006101000a81548160ff021916908315150217905550836002016000815480929190600190039190505550600191505b5092915050565b606082600001826040518082805190602001908083835b602083101515616b245780518252602082019150602081019050602083039250616aff565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015616bee5780601f10616bc357610100808354040283529160200191616bee565b820191906000526020600020905b815481529060010190602001808311616bd157829003601f168201915b5050505050905092915050565b606060006060600080616c0e8a8961747c565b50616c1b8b8b8b8b6175dd565b9250616c268b614c71565b809c508195505050831515616c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401616c679061986a565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04d4ef3601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163089878c6040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401616d119594939291906192c2565b6040805180830381600087803b158015616d2a57600080fd5b505af1158015616d3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250616d6291908101906180d1565b809250819350505080616db3876040805190810160405280600a81526020017f466f7262696464656e20000000000000000000000000000000000000000000008152506176e390919063ffffffff16565b901515616df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401616ded9190619728565b60405180910390fd5b508a9450505050509695505050505050565b600080838311151515616e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401616e479061988a565b60405180910390fd5b82840390508091505092915050565b600081600201549050919050565b606060006060600080616e808a8961747c565b50616e8d8b8b8b8b6175dd565b9250616e988b614c71565b809c508195505050831515616ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401616ed99061986a565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c04d4ef3601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168d6002815181101515616f5257fe5b9060200190602002015189878c6040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401616f9b9594939291906190ff565b6040805180830381600087803b158015616fb457600080fd5b505af1158015616fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250616fec91908101906180d1565b80925081935050508061703d876040805190810160405280600a81526020017f466f7262696464656e20000000000000000000000000000000000000000000008152506176e390919063ffffffff16565b901515617080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016170779190619728565b60405180910390fd5b508a9450505050509695505050505050565b60008084600001846040518082805190602001908083835b6020831015156170cf57805182526020820191506020810190506020830392506170aa565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000015490506000811115617282577f77da9cffaff6366f6be90a928ae84ae14a77d3138ce236f9481aa71d15a9c47c32336040805190810160405280600681526020017f4d4f4449465900000000000000000000000000000000000000000000000000008152508789600001896040518082805190602001908083835b6020831015156171a55780518252602082019150602081019050602083039250617180565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001016040516171ec959493929190619161565b60405180910390a18285600001856040518082805190602001908083835b60208310151561722f578051825260208201915060208101905060208303925061720a565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001019080519060200190617278929190617a15565b5060019150617287565b600091505b509392505050565b60606172a38361729e846178b4565b6172ab565b905092915050565b606080606080606060008088955087945084518651016040519080825280601f01601f1916602001820160405280156172f35781602001602082028038833980820191505090505b50935083925060009150600090505b85518110156173b557858181518110151561731957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561737857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050617302565b600090505b845181101561746d5784818151811015156173d157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561743057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506173ba565b83965050505050505092915050565b600080831115156174c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016174b99061996a565b60405180910390fd5b60008260008151811015156174d357fe5b9060200190602002015151118015617504575060ff8260008151811015156174f757fe5b9060200190602002015151105b1515617545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161753c906199ca565b60405180910390fd5b6001825111156175d357600082600181518110151561756057fe5b9060200190602002015151118015617591575060ff82600181518110151561758457fe5b9060200190602002015151105b15156175d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016175c99061980a565b60405180910390fd5b5b6001905092915050565b606080600080600080600093505b895184101561762d5761761e8a8581518110151561760557fe5b906020019060200201518661728f90919063ffffffff16","565b945083806001019450506175eb565b617640898661799390919063ffffffff16565b9450600092505b875183101561768c57878381518110151561765e57fe5b90602001906020020151915061767d828661799390919063ffffffff16565b94508280600101935050617647565b600090505b86518110156176d3576176c487828151811015156176ab57fe5b906020019060200201518661633090919063ffffffff16565b94508080600101915050617691565b8495505050505050949350505050565b606080606080606060008088955087945084518651016040519080825280601f01601f19166020018201604052801561772b5781602001602082028038833980820191505090505b50935083925060009150600090505b85518110156177ed57858181518110151561775157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838060010194508151811015156177b057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061773a565b600090505b84518110156178a557848181518110151561780957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561786857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506177f2565b83965050505050505092915050565b6060600080836c0100000000000000000000000002915060146040519080825280601f01601f1916602001820160405280156178ff5781602001602082028038833980820191505090505b509250600090505b601481101561798c57818160148110151561791e57fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002838281518110151561794f57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050617907565b5050919050565b60606179a7836179a2846179af565b6172ab565b905092915050565b606060206040519080825280601f01601f1916602001820160405280156179e55781602001602082028038833980820191505090505b509050816020820152919050565b6040805190810160405280600290602082028038833980820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10617a5657805160ff1916838001178555617a84565b82800160010185558215617a84579182015b82811115617a83578251825591602001919060010190617a68565b5b509050617a919190617b0f565b5090565b815481835581811115617ac257600202816002028360005260206000209182019101617ac19190617b34565b5b505050565b50805460018160011615610100020316600290046000825580601f10617aed5750617b0c565b601f016020900490600052602060002090810190617b0b9190617b0f565b5b50565b617b3191905b80821115617b2d576000816000905550600101617b15565b5090565b90565b617b7491905b80821115617b705760008082016000617b539190617ac7565b6001820160006101000a81549060ff021916905550600201617b3a565b5090565b90565b6000617b838235619da9565b905092915050565b6000617b978251619da9565b905092915050565b600082601f8301121515617bb257600080fd5b8135617bc5617bc082619b00565b619ad3565b91508181835260208401935060208101905083856020840282011115617bea57600080fd5b60005b83811015617c1a5781617c008882617b77565b845260208401935060208301925050600181019050617bed565b5050505092915050565b600082601f8301121515617c3757600080fd5b6004617c4a617c4582619b28565b619ad3565b91508183856020840282011115617c6057600080fd5b60005b83811015617c905781617c768882617f1a565b845260208401935060208301925050600181019050617c63565b5050505092915050565b600082601f8301121515617cad57600080fd5b8135617cc0617cbb82619b4a565b619ad3565b91508181835260208401935060208101905083856020840282011115617ce557600080fd5b60005b83811015617d155781617cfb8882617f84565b845260208401935060208301925050600181019050617ce8565b5050505092915050565b600082601f8301121515617d3257600080fd5b8135617d45617d4082619b72565b619ad3565b9150818183526020840193506020810190508360005b83811015617d8b5781358601617d718882617f98565b845260208401935060208301925050600181019050617d5b565b5050505092915050565b600082601f8301121515617da857600080fd5b8151617dbb617db682619b72565b619ad3565b9150818183526020840193506020810190508360005b83811015617e015781518601617de78882617fee565b845260208401935060208301925050600181019050617dd1565b5050505092915050565b600082601f8301121515617e1e57600080fd5b6002617e31617e2c82619b9a565b619ad3565b91508183856020840282011115617e4757600080fd5b60005b83811015617e775781617e5d8882618058565b845260208401935060208301925050600181019050617e4a565b5050505092915050565b600082601f8301121515617e9457600080fd5b8135617ea7617ea282619bbc565b619ad3565b91508181835260208401935060208101905083856020840282011115617ecc57600080fd5b60005b83811015617efc5781617ee28882618044565b845260208401935060208301925050600181019050617ecf565b5050505092915050565b6000617f128251619dc9565b905092915050565b6000617f268235619dd5565b905092915050565b600082601f8301121515617f4157600080fd5b8135617f54617f4f82619be4565b619ad3565b91508082526020830160208301858383011115617f7057600080fd5b617f7b838284619e17565b50505092915050565b6000617f908235619ddf565b905092915050565b600082601f8301121515617fab57600080fd5b8135617fbe617fb982619c10565b619ad3565b91508082526020830160208301858383011115617fda57600080fd5b617fe5838284619e17565b50505092915050565b600082601f830112151561800157600080fd5b815161801461800f82619c10565b619ad3565b9150808252602083016020830185838301111561803057600080fd5b61803b838284619e26565b50505092915050565b60006180508235619de9565b905092915050565b60006180648251619de9565b905092915050565b60006020828403121561807e57600080fd5b600061808c84828501617b8b565b91505092915050565b60008060a083850312156180a857600080fd5b60006180b685828601617b77565b92505060206180c785828601617c24565b9150509250929050565b600080604083850312156180e457600080fd5b60006180f285828601617b8b565b925050602061810385828601617f06565b9150509250929050565b60006020828403121561811f57600080fd5b600082013567ffffffffffffffff81111561813957600080fd5b61814584828501617b9f565b91505092915050565b6000806000806000610100868803121561816757600080fd5b600086013567ffffffffffffffff81111561818157600080fd5b61818d88828901617b9f565b955050602061819e88828901618044565b945050604086013567ffffffffffffffff8111156181bb57600080fd5b6181c788828901617c9a565b935050606086013567ffffffffffffffff8111156181e457600080fd5b6181f088828901617d1f565b925050608061820188828901617c24565b9150509295509295909350565b60006080828403121561822057600080fd5b600061822e84828501617c24565b91505092915050565b60006020828403121561824957600080fd5b600082015167ffffffffffffffff81111561826357600080fd5b61826f84828501617d95565b91505092915050565b60008060008060e0858703121561828e57600080fd5b600085013567ffffffffffffffff8111156182a857600080fd5b6182b487828801617e81565b945050602085013567ffffffffffffffff8111156182d157600080fd5b6182dd87828801617b9f565b935050604085013567ffffffffffffffff8111156182fa57600080fd5b61830687828801617c9a565b925050606061831787828801617c24565b91505092959194509250565b60006020828403121561833557600080fd5b600061834384828501617f06565b91505092915050565b6000806060838503121561835f57600080fd5b600061836d85828601617f06565b925050602061837e85828601617e0b565b9150509250929050565b60006020828403121561839a57600080fd5b600082013567ffffffffffffffff8111156183b457600080fd5b6183c084828501617f2e565b91505092915050565b60008060a083850312156183dc57600080fd5b600083013567ffffffffffffffff8111156183f657600080fd5b61840285828601617f2e565b925050602061841385828601617c24565b9150509250929050565b6000806040838503121561843057600080fd5b600083013567ffffffffffffffff81111561844a57600080fd5b61845685828601617f2e565b925050602083013567ffffffffffffffff81111561847357600080fd5b61847f85828601617f2e565b9150509250929050565b600080600060c0848603121561849e57600080fd5b600084013567ffffffffffffffff8111156184b857600080fd5b6184c486828701617f2e565b935050602084013567ffffffffffffffff8111156184e157600080fd5b6184ed86828701617f2e565b92505060406184fe86828701617c24565b9150509250925092565b60006020828403121561851a57600080fd5b600061852884828501618058565b91505092915050565b61853a81619d52565b82525050565b600061854b82619c96565b80845260208401935061855d83619c3c565b60005b8281101561858f57618573868351618531565b61857c82619d04565b9150602086019550600181019050618560565b50849250505092915050565b6185a481619ca1565b6185ad82619c49565b60005b828110156185df576185c3858351618764565b6185cc82619d11565b91506020850194506001810190506185b0565b5050505050565b60006185f182619cac565b80845260208401935061860383619c53565b60005b8281101561863557618619868351618883565b618622","82619d1e565b9150602086019550600181019050618606565b50849250505092915050565b600061864c82619cb7565b8084526020840193508360208202850161866585619c60565b60005b8481101561869e5783830388526186808383516188c8565b925061868b82619d2b565b9150602088019750600181019050618668565b508196508694505050505092915050565b6186b881619cc2565b6186c182619c6d565b60005b828110156186f3576186d785835161907a565b6186e082619d38565b91506020850194506001810190506186c4565b5050505050565b600061870582619ccd565b80845260208401935061871783619c77565b60005b828110156187495761872d86835161907a565b61873682619d45565b915060208601955060018101905061871a565b50849250505092915050565b61875e81619d72565b82525050565b61876d81619d7e565b82525050565b600061877e82619ce3565b808452618792816020860160208601619e26565b61879b81619e59565b602085010191505092915050565b60006187b482619cd8565b8084526187c8816020860160208601619e26565b6187d181619e59565b602085010191505092915050565b6000815460018116600081146187fc576001811461881c5761885d565b607f600283041680865260ff19831660208701526040860193505061885d565b6002820480865260208601955061883285619c84565b60005b8281101561885457815481890152600182019150602081019050618835565b80880195505050505b505092915050565b61886e81619df3565b82525050565b61887d81619e05565b82525050565b61888c81619d88565b82525050565b600061889d82619cf9565b8084526188b1816020860160208601619e26565b6188ba81619e59565b602085010191505092915050565b60006188d382619cee565b8084526188e7816020860160208601619e26565b6188f081619e59565b602085010191505092915050565b6000602c82527f466f7262696464656e207175657279426f6f6b206265636175736520796f752060208301527f6172656e2774206f776e657200000000000000000000000000000000000000006040830152606082019050919050565b6000601182527f466f7262696464656e20616464426f6f6b0000000000000000000000000000006020830152604082019050919050565b6000600e82527f73657420466f7262696464656e210000000000000000000000000000000000006020830152604082019050919050565b6000601682527f66726f6d206163636f756e74206e6f74206578697374000000000000000000006020830152604082019050919050565b6000600a82527f676574486f6c64657273000000000000000000000000000000000000000000006020830152604082019050919050565b6000600782527f616464426f6f6b000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000601382527f466f7262696464656e207175657279426f6f6b000000000000000000000000006020830152604082019050919050565b6000601b82527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006020830152604082019050919050565b6000602982527f546865206c656e677468206f66207375626a656374206279746573206973207760208301527f697468696e2032353500000000000000000000000000000000000000000000006040830152606082019050919050565b6000602382527f417574683a6f6e6c79206163636f756e7420737461747573206973206e6f726d60208301527f616c2e00000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000601182527f72656d6f766520466f7262696464656e210000000000000000000000000000006020830152604082019050919050565b6000602182527f6f70657261746f72206f72206163636f756e74206973206e6f74206e6f726d6160208301527f6c000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000601e82527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006020830152604082019050919050565b6000604182527f6c696d6974206e6f74207665726966792c6c696d69742073697a652073686f7560208301527f6c6420657175616c73203220616e64206c696d69745b305d3c6c696d69745b3160408301527f5d000000000000000000000000000000000000000000000000000000000000006060830152608082019050919050565b6000601d82527f746865206163636f756e7420686173206e6f74206265656e206f70656e0000006020830152604082019050919050565b6000600e82527f67657420466f7262696464656e210000000000000000000000000000000000006020830152604082019050919050565b6000601482527f466f7262696464656e20676574486f6c646572730000000000000000000000006020830152604082019050919050565b6000601f82527f676574546f74616c42616c616e636520676574546f74616c42616c616e6365006020830152604082019050919050565b6000601182527f696e7365727420466f7262696464656e210000000000000000000000000000006020830152604082019050919050565b6000601782527f616d6f756e743c3d30206973206e6f74207665726966790000000000000000006020830152604082019050919050565b6000601482527f746f206163636f756e74206e6f742065786973740000000000000000000000006020830152604082019050919050565b6000601982527f746865206163636f756e7420686173206265656e206f70656e000000000000006020830152604082019050919050565b6000600982527f7175657279426f6f6b00000000000000000000000000000000000000000000006020830152604082019050919050565b6000602682527f546865206c656e677468206f662064657363206279746573206973207769746860208301527f696e2032353500000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000600b82527f6f70656e4163636f756e740000000000000000000000000000000000000000006020830152604082019050919050565b6000601582527f466f7262696464656e206f70656e4163636f756e7400000000000000000000006020830152604082019050919050565b6000600f82527f676574546f74616c42616c616e636500000000000000000000000000000000006020830152604082019050919050565b6000600a82527f67657442616c616e6365000000000000000000000000000000000000000000006020830152604082019050919050565b6000601482527f466f7262696464656e2067657442616c616e63650000000000000000000000006020830152604082019050919050565b6000600e82527f61646420466f7262696464656e210000000000000000000000000000000000006020830152604082019050919050565b61908381619d92565b82525050565b61909281619d9c565b82525050565b60006020820190506190ad6000830184618531565b92915050565b60006080820190506190c86000830187618531565b6190d56020830186618531565b6190e26040830185618531565b81810360608301526190f48184618773565b905095945050505050565b6000610100820190506191156000830188618531565b6191226020830187618531565b818103604083015261913481866187a9565b905081810360608301526191488185618773565b9050619157608083018461859b565b9695505050505050565b600060a0820190506191766000830188618531565b6191836020830187618531565b818103604083015261919581866187a9565b905081810360608301526191a98185618773565b905081810360808301526191bd81846187df565b90509695505050505050565b6000610100820190506191df6000830187618531565b6191ec6020830186618531565b81810360408301526191fd81618fd5565b905081810360608301526192118185618773565b9050619220608083018461859b565b95945050505050565b600060608201905061923e6000830186618531565b61924b6020830185618531565b619258604083018461907a565b949350505050565b6000610100820190506192766000830188618531565b6192836020830187618865565b81810360408301526192958186618773565b905081810360608301526192a98185618773565b90506192b8608083018461859b565b9695505050505050565b6000610100820190506192d86000830188618531565b6192e56020830187618874565b81810360408301526192f781866187a9565b9050818103606083015261930b8185618773565b905061931a608083018461859b565b9695505050505050565b60006101008201905061933a6000830187618531565b6193476020830186618874565b818103604083015261935881618a00565b9050818103606083015261936c8185618773565b905061937b608083018461859b565b95945050505050565b60006101008201905061939a6000830187618531565b6193a76020830186618874565b81810360408301526193b881618a37565b905081810360608301526193cc8185618773565b90506193db608083018461859b565b95945050505050565b6000610100820190506193fa6000830187618531565b6194076020830186618874565b818103604083015261941881618e9c565b9050818103606083015261942c8185618773565b905061943b608083018461859b565b95945050505050565b60006101008201905061945a6000830187618531565b6194676020830186618874565b818103604083015261947881618f30565b9050818103606083015261948c8185618773565b905061949b608083018461859b565b95945050505050565b6000610100820190506194ba6000830187618531565b6194c76020830186618874565b81810360408301526194d881618f9e565b905081810360608301526194ec8185618773565b90506194fb608083018461859b565b95945050505050565b60006040820190506195196000830185618531565b619526602083018461907a565b9392505050565b600060208201905081810360008301526195478184618540565b905092915050565b600060808201905081810360008301526195698187618540565b9050619578602083018661907a565b818103604083015261958a8185618641565b9050818103606083015261959e81846185e6565b905095945050505050565b600060208201905081810360008301526195c38184618641565b905092915050565b600060608201905081810360008301526195e581866186fa565b905081810360208301526195f98185618540565b9050818103604083015261960d81846185e6565b9050949350505050565b6000602082","01905061962c6000830184618755565b92915050565b60006040820190506196476000830185618755565b81810360208301526196598184618540565b90509392505050565b60006060820190506196776000830185618755565b61968460208301846186af565b9392505050565b600060208201905081810360008301526196a581846187a9565b905092915050565b600060208201905081810360008301526196c78184618773565b905092915050565b60006060820190506196e46000830186618874565b6196f16020830185618531565b6196fe6040830184618755565b949350505050565b6000602082019050818103600083015261972081846188c8565b905092915050565b600060208201905081810360008301526197428184618892565b905092915050565b60006020820190508181036000830152619763816188fe565b9050919050565b600060208201905081810360008301526197838161895b565b9050919050565b600060208201905081810360008301526197a381618992565b9050919050565b600060208201905081810360008301526197c3816189c9565b9050919050565b600060208201905081810360008301526197e381618a6e565b9050919050565b6000602082019050818103600083015261980381618aa5565b9050919050565b6000602082019050818103600083015261982381618adc565b9050919050565b6000602082019050818103600083015261984381618b39565b9050919050565b6000602082019050818103600083015261986381618b96565b9050919050565b6000602082019050818103600083015261988381618bcd565b9050919050565b600060208201905081810360008301526198a381618c2a565b9050919050565b600060208201905081810360008301526198c381618c61565b9050919050565b600060208201905081810360008301526198e381618ce4565b9050919050565b6000602082019050818103600083015261990381618d1b565b9050919050565b6000602082019050818103600083015261992381618d52565b9050919050565b6000602082019050818103600083015261994381618d89565b9050919050565b6000602082019050818103600083015261996381618dc0565b9050919050565b6000602082019050818103600083015261998381618df7565b9050919050565b600060208201905081810360008301526199a381618e2e565b9050919050565b600060208201905081810360008301526199c381618e65565b9050919050565b600060208201905081810360008301526199e381618ed3565b9050919050565b60006020820190508181036000830152619a0381618f67565b9050919050565b60006020820190508181036000830152619a238161900c565b9050919050565b60006020820190508181036000830152619a4381619043565b9050919050565b6000602082019050619a5f600083018461907a565b92915050565b600060a082019050619a7a600083018861907a565b619a87602083018761907a565b619a946040830186618531565b619aa16060830185618531565b619aae608083018461907a565b9695505050505050565b6000602082019050619acd6000830184619089565b92915050565b6000604051905081810181811067ffffffffffffffff82111715619af657600080fd5b8060405250919050565b600067ffffffffffffffff821115619b1757600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115619b3f57600080fd5b602082029050919050565b600067ffffffffffffffff821115619b6157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115619b8957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115619bb157600080fd5b602082029050919050565b600067ffffffffffffffff821115619bd357600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115619bfb57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115619c2757600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b60008160005260206000209050919050565b600081519050919050565b600060049050919050565b600081519050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b6000819050919050565b6000819050919050565b600060ff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000619dfe82619d52565b9050919050565b6000619e1082619d52565b9050919050565b82818337600083830152505050565b60005b83811015619e44578082015181840152602081019050619e29565b83811115619e53576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a7230582038756fe89482b8af617a5e5bce20e0668459516d83b3a387021a06c64019cf4b6c6578706572696d656e74616cf5003760806040523480156200001157600080fd5b506040516200593638038062005936833981018060405262000037919081019062000354565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260019080600181540180825580915050906001820390600052602060002001600090919290919091505550611001600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a9080519060200190620000ff9291906200021b565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166356004b6a600a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016200017a91906200055d565b602060405180830381600087803b1580156200019557600080fd5b505af1158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001d09190810190620003c3565b5080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000678565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200025e57805160ff19168380011785556200028f565b828001600101855582156200028f579182015b828111156200028e57825182559160200191906001019062000271565b5b5090506200029e9190620002a2565b5090565b620002c791905b80821115620002c3576000816000905550600101620002a9565b5090565b90565b6000620002d8825162000618565b905092915050565b6000620002ee825162000638565b905092915050565b600082601f83011215156200030a57600080fd5b8151620003216200031b82620005d9565b620005ab565b915080825260208301602083018583830111156200033e57600080fd5b6200034b83828462000642565b50505092915050565b6000806000606084860312156200036a57600080fd5b60006200037a86828701620002ca565b935050602084015167ffffffffffffffff8111156200039857600080fd5b620003a686828701620002f6565b9250506040620003b986828701620002ca565b9150509250925092565b600060208284031215620003d657600080fd5b6000620003e684828501620002e0565b91505092915050565b6000815460018116600081146200040f5760018114620004305762000475565b607f600283041680865260ff19831660208701526040860193505062000475565b60028204808652602086019550620004488562000606565b60005b828110156200046c578154818901526001820191506020810190506200044b565b80880195505050505b505092915050565b6000600782527f626f6f6b5f6e6f000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000606482527f7465726d5f6e6f2c7365712c66726f6d2c746f2c616d6f756e742c617373657460208301527f2c6f70657261746f722c646573632c7472616e73616374696f6e5f747970652c60408301527f6f7065726174696f6e5f747970652c7375626a6563742c72656c617465645f6160608301527f7373657400000000000000000000000000000000000000000000000000000000608083015260a082019050919050565b60006060820190508181036000830152620005798184620003ef565b905081810360208301526200058e816200047d565b90508181036040830152620005a381620004b4565b905092915050565b6000604051905081810181811067ffffffffffffffff82111715620005cf57600080fd5b8060405250919050565b600067ffffffffffffffff821115620005f157600080fd5b601f19601f8301169050602081019050919050565b60008160005260206000209050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200066257808201518184015260208101905062000645565b8381111562000672576000848401525b50505050565b6152ae80620006886000396000f300608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806318d6f1711461006757806338cc4831146100a5578063521ae536146100d0578063e953d0af1461010d575b600080fd5b34801561007357600080fd5b5061008e6004803603610089919081019061405e565b610138565b60405161009c929190614982565b60405180910390f35b3480156100b157600080fd5b506100ba6105c9565b6040516100c79190614945565b60405180910390f35b3480156100dc57600080fd5b506100f760048036036100f29190810190614109","565b6105d1565b6040516101049190614960565b60405180910390f35b34801561011957600080fd5b50610122610c92565b60405161012f9190614f3f565b60405180910390f35b6000610142613c9a565b600060606000806000610153613c9a565b60048c5110158015610166575060028951145b15156101a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019e90614db9565b60405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663124b65b46040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801561022c57600080fd5b505af1158015610240573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061026991908101906142d7565b80965081975050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638662f51f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156102f657600080fd5b505af115801561030a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061032e91908101906142ae565b935061033e86858e8e8e8e610cef565b9250600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c9600a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016103b89190614a4f565b602060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061040a919081019061421b565b915060018273ffffffffffffffffffffffffffffffffffffffff166331afac36610454600260016002805490500381548110151561044457fe5b90600052602060002001546116b9565b866040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161048e929190614a1f565b602060405180830381600087803b1580156104a857600080fd5b505af11580156104bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104e09190810190614244565b141515610522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051990614e63565b60405180910390fd5b61052d86858e611810565b60408051908101604052808781526020018581525090507f6acb627e94f15db3e6d10b82668ddd36dc340d2d921352d5e3a166bc08babada86858e600281518110151561057657fe5b906020019060200201518f600381518110151561058f57fe5b906020019060200201518f6040516105ab959493929190614f5a565b60405180910390a16001819750975050505050505094509492505050565b600030905090565b60606000606060006060600080606060008b5111806105f1575060008a51115b1515610632576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062990614db9565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c9600a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016106aa9190614a4f565b602060405180830381600087803b1580156106c457600080fd5b505af11580156106d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506106fc919081019061421b565b96506107088b8b611dca565b80965081975050508673ffffffffffffffffffffffffffffffffffffffff16637857d7c96040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561077457600080fd5b505af1158015610788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107ac91908101906141a0565b92506000915060008b511180156107dc575060008b60008151811015156107cf57fe5b9060200190602002015114155b15610889578273ffffffffffffffffffffffffffffffffffffffff1663cd30a1d161081e8d600081518110151561080f57fe5b906020019060200201516116b9565b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016108569190614c9a565b600060405180830381600087803b15801561087057600080fd5b505af1158015610884573d6000803e3d6000fd5b505050505b60018b511180156108b3575060008b60018151811015156108a657fe5b9060200190602002015114155b15610960578273ffffffffffffffffffffffffffffffffffffffff1663cd30a1d16108f58d60018151811015156108e657fe5b906020019060200201516116b9565b6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161092d9190614d0f565b600060405180830381600087803b15801561094757600080fd5b505af115801561095b573d6000803e3d6000fd5b505050505b60008a511180156109b65750600073ffffffffffffffffffffffffffffffffffffffff168a600081518110151561099357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b15610a79578273ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1610a0e8c60008151811015156109e957fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1661244e565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610a469190614bf7565b600060405180830381600087803b158015610a6057600080fd5b505af1158015610a74573d6000803e3d6000fd5b505050505b60018a51118015610acf5750600073ffffffffffffffffffffffffffffffffffffffff168a6001815181101515610aac57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b15610b92578273ffffffffffffffffffffffffffffffffffffffff1663cd30a1d1610b278c6001815181101515610b0257fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1661244e565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610b5f9190614b54565b600060405180830381600087803b158015610b7957600080fd5b505af1158015610b8d573d6000803e3d6000fd5b505050505b8273ffffffffffffffffffffffffffffffffffffffff16637ec1cc658a6000815181101515610bbd57fe5b906020019060200201518b6001815181101515610bd657fe5b906020019060200201516040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610c199291906149c6565b600060405180830381600087803b158015610c3357600080fd5b505af1158015610c47573d6000803e3d6000fd5b50505050610c568686856125c2565b809350819250505060008151118015610c6f5750600082135b15610c8157610c7e81836128ca565b93505b839750505050505050509392505050565b6000600260016002805490500190806001815401808255809150509060018203906000526020600020016000909192909190915055506002600160028054905003815481101515610cdf57fe5b9060005260206000200154905090565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c9600a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610d6c9190614a4f565b602060405180830381600087803b158015610d8657600080fd5b505af1158015610d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dbe919081019061421b565b91508173ffffffffffffffffffffffffffffffffffffffff166313db93466040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610e2457600080fd5b505af1158015610e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e5c91908101906141f2565b90508073ffffffffffffffffffffffffffffffffffffffff1663e942b516610ea46002600160028054905003815481101515610e9457fe5b90600052602060002001546116b9565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610edc9190614dd9565b600060405180830381600087803b158015610ef657600080fd5b505af1158015610f0a573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516610f338a6116b9565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610f6b9190614d0f565b600060405180830381600087803b158015610f8557600080fd5b505af1158015610f99573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b516610fc28b6116b9565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610ffa9190614c9a565b600060405180830381600087803b15801561101457600080fd5b505af1158015611028573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b51661107f89600281518110151561105a57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1661244e565b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016110b79190614bf7565b600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b505050508073ffffffffff","ffffffffffffffffffffffffffffff1663e942b51661113c89600381518110151561111757fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1661244e565b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016111749190614b54565b600060405180830381600087803b15801561118e57600080fd5b505af11580156111a2573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663a815ff158860018151811015156111d157fe5b906020019060200201516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016112139190614a91565b600060405180830381600087803b15801561122d57600080fd5b505af1158015611241573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b51661126a886116b9565b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016112a29190614e2e565b600060405180830381600087803b1580156112bc57600080fd5b505af11580156112d0573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663a815ff158860008151811015156112ff57fe5b906020019060200201516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016113419190614c4c565b600060405180830381600087803b15801561135b57600080fd5b505af115801561136f573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663e942b51686600081518110151561139e57fe5b906020019060200201516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016113e09190614d64565b600060405180830381600087803b1580156113fa57600080fd5b505af115801561140e573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16632ef8ba7485600081518110151561143d57fe5b906020019060200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161147f9190614ec3565b600060405180830381600087803b15801561149957600080fd5b505af11580156114ad573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16632ef8ba748560018151811015156114dc57fe5b906020019060200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161151e9190614f11565b600060405180830381600087803b15801561153857600080fd5b505af115801561154c573d6000803e3d6000fd5b505050506001855111156115fa578073ffffffffffffffffffffffffffffffffffffffff1663e942b51686600181518110151561158557fe5b906020019060200201516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016115c79190614adf565b600060405180830381600087803b1580156115e157600080fd5b505af11580156115f5573d6000803e3d6000fd5b505050505b8073ffffffffffffffffffffffffffffffffffffffff1663a815ff15600589511061163d5788600481518110151561162e57fe5b90602001906020020151611640565b60005b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016116789190614ba9565b600060405180830381600087803b15801561169257600080fd5b505af11580156116a6573d6000803e3d6000fd5b5050505080925050509695505050505050565b60606000806060600080861415611707576040805190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509450611807565b8593505b600084141515611731578280600101935050600a8481151561172957fe5b04935061170b565b826040519080825280601f01601f1916602001820160405280156117645781602001602082028038833980820191505090505b5091506001830390505b60008614151561180357600a8681151561178457fe5b066030017f0100000000000000000000000000000000000000000000000000000000000000028282806001900393508151811015156117bf57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a868115156117fb57fe5b04955061176e565b8194505b50505050919050565b600760008481526020019081526020016000206000600260016002805490500381548110151561183c57fe5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff1615156119265760036000848152602001908152602001600020600260016002805490500381548110151561189357fe5b90600052602060002001549080600181540180825580915050906001820390600052602060002001600090919290919091505550600160076000858152602001908152602001600020600060026001600280549050038154811015156118f557fe5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600260016002805490500381548110151561193d57fe5b906000526020600020015460046000848152602001908152602001600020819055506008600082600281518110151561197257fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060026001600280549050038154811015156119cf57fe5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff16158015611a485750806002815181101515611a0d57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614155b15611b925760056000826002815181101515611a6057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002600160028054905003815481101515611abb57fe5b90600052602060002001549080600181540180825580915050906001820390600052602060002001600090919290919091505550600160086000836002815181101515611b0457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006002600160028054905003815481101515611b6157fe5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60096000826003815181101515611ba557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006002600160028054905003815481101515611c0257fe5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff16158015611c7b5750806003815181101515611c4057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614155b15611dc55760066000826003815181101515611c9357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002600160028054905003815481101515611cee57fe5b90600052602060002001549080600181540180825580915050906001820390600052602060002001600090919290919091505550600160096000836003815181101515611d3757fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006002600160028054905003815481101515611d9457fe5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055505b505050565b6060600060606000806000806000600280549050604051908082528060200260200182016040528015611e0c5781602001602082028038833980820191505090505b50955060018a51118015611e39575060008a6001815181101515611e2c57fe5b9060200190602002015114155b15611ec7576000600460008c6001815181101515611e5357fe5b90602001906020020151815260200190815260200160002054141515611ec6576001866001600460008e6001815181101515611e8b57fe5b9060200190602002015181526020019081526020016000205403815181101515611eb157fe5b90602001906020020190151590811515815250505b5b60008a51118015611ef1575060008a6000815181101515611ee457fe5b9060200190602002015114155b1561200c57600094505b600360008b6000815181101515611f0e57fe5b9060200190602002015181526020019081526020016000208054905085101561200b57856001600360008d6000815181101515611f4757fe5b90602001906020020151815260200190815260200160002087815481101515611f6c57fe5b906000526020600020015403815181101515611f8457fe5b906020019060200201511515611ffe576001866001600360008e6000815181101515611fac57fe5b90602001906020020151815260200190815260200160002088815481101515611fd157fe5b906000526020600020015403815181101515611fe957fe5b90602001906020020190151590811515815250505b8480600101955050611efb565b5b600089511180156120625750600073ffffffffffffffffffffffffffffffffffffffff1689600081518110151561203f57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b1561220157600093505b600560008a600081518110151561207f57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905084101561220057856001600560008c60008151811015156120e457fe5b9060200190602002015173ff","ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208681548110151561213557fe5b90600052602060002001540381518110151561214d57fe5b9060200190602002015115156121f3576001866001600560008d600081518110151561217557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020878154811015156121c657fe5b9060005260206000200154038151811015156121de57fe5b90602001906020020190151590811515815250505b838060010194505061206c565b5b600189511180156122575750600073ffffffffffffffffffffffffffffffffffffffff1689600181518110151561223457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b156123f657600092505b600660008a600181518110151561227457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508310156123f557856001600660008c60018151811015156122d957fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208581548110151561232a57fe5b90600052602060002001540381518110151561234257fe5b9060200190602002015115156123e8576001866001600660008d600181518110151561236a57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020868154811015156123bb57fe5b9060005260206000200154038151811015156123d357fe5b90602001906020020190151590811515815250505b8280600101935050612261565b5b60009150600090505b855181101561243b57858181518110151561241657fe5b906020019060200201511561242e5781806001019250505b80806001019150506123ff565b8582975097505050505050509250929050565b60606000806000606060008673ffffffffffffffffffffffffffffffffffffffff16945060008514156124b8576040805190810160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525095506125b8565b8493505b6000841415156124e2578280600101935050600a848115156124da57fe5b0493506124bc565b826040519080825280601f01601f1916602001820160405280156125155781602001602082028038833980820191505090505b5091506001830390505b6000851415156125b457600a8581151561253557fe5b066030017f01000000000000000000000000000000000000000000000000000000000000000282828060019003935081518110151561257057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a858115156125ac57fe5b04945061251f565b8195505b5050505050919050565b6060600080600060606000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f23f63c9600a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016126489190614a4f565b602060405180830381600087803b15801561266257600080fd5b505af1158015612676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061269a919081019061421b565b955060009450896040519080825280602002602001820160405280156126cf5781602001602082028038833980820191505090505b50935060009250600091505b8a518210156128b6578a828151811015156126f257fe5b90602001906020020151156128a9578573ffffffffffffffffffffffffffffffffffffffff1663e8434e39612729600185016116b9565b8b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016127639291906149ef565b602060405180830381600087803b15801561277d57600080fd5b505af1158015612791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127b591908101906141c9565b90508073ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561281b57600080fd5b505af115801561282f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128539190810190614244565b8501945080848480600101955081518110151561286c57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b81806001019250506126db565b838597509750505050505050935093915050565b60608060008060008060006060600c890260405190808252806020026020018201604052801561290e57816020015b60608152602001906001900390816128f95790505b509650600095505b895186101561353457898681518110151561292d57fe5b90602001906020020151945060009350600092505b8473ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156129a657600080fd5b505af11580156129ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129de9190810190614244565b831215613527578473ffffffffffffffffffffffffffffffffffffffff1663846719e0846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612a3a91906149ab565b602060405180830381600087803b158015612a5457600080fd5b505af1158015612a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a8c91908101906141f2565b915060009350612c938273ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612ae890614bd7565b600060405180830381600087803b158015612b0257600080fd5b505af1158015612b16573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612b3f919081019061426d565b8373ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612b9290614b34565b600060405180830381600087803b158015612bac57600080fd5b505af1158015612bc0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612be9919081019061426d565b8473ffffffffffffffffffffffffffffffffffffffff1663bf40fac16040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612c3c90614c2c565b602060405180830381600087803b158015612c5657600080fd5b505af1158015612c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c8e9190810190614035565b613544565b905060038151141515612cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd290614b14565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612d2e90614c7a565b600060405180830381600087803b158015612d4857600080fd5b505af1158015612d5c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612d85919081019061426d565b878585600c0201815181101515612d9857fe5b906020019060200201819052508173ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612df890614cef565b600060405180830381600087803b158015612e1257600080fd5b505af1158015612e26573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612e4f919081019061426d565b878560010195508585600c0201815181101515612e6857fe5b90602001906020020181905250806000815181101515612e8457fe5b90602001906020020151878560010195508585600c0201815181101515612ea757fe5b90602001906020020181905250806001815181101515612ec357fe5b90602001906020020151878560010195508585600c0201815181101515612ee657fe5b906020019060200201819052508173ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612f4690614e0e565b600060405180830381600087803b158015612f6057600080fd5b505af1158015612f74573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612f9d919081019061426d565b878560010195508585600c0201815181101515612fb657fe5b906020019060200201819052508173ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161301690614d44565b600060405180830381600087803b15801561303057600080fd5b505af1158015613044573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061306d919081019061426d565b878560010195508585600c020181518110151561308657fe5b906020019060200201819052506131568273ffffffffffffffffffffffffffffffffffffffff1663bf40fac16040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016130e990614a71565b60206040518083","0381600087803b15801561310357600080fd5b505af1158015613117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061313b9190810190614035565b73ffffffffffffffffffffffffffffffffffffffff1661244e565b878560010195508585600c020181518110151561316f57fe5b9060200190602002018190525080600281518110151561318b57fe5b90602001906020020151878560010195508585600c02018151811015156131ae57fe5b906020019060200201819052506132688273ffffffffffffffffffffffffffffffffffffffff1663fda69fae6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161321190614ea3565b602060405180830381600087803b15801561322b57600080fd5b505af115801561323f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132639190810190614244565b6116b9565b878560010195508585600c020181518110151561328157fe5b9060200190602002018190525061333b8273ffffffffffffffffffffffffffffffffffffffff1663fda69fae6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016132e490614ef1565b602060405180830381600087803b1580156132fe57600080fd5b505af1158015613312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133369190810190614244565b6116b9565b878560010195508585600c020181518110151561335457fe5b906020019060200201819052506134248273ffffffffffffffffffffffffffffffffffffffff1663bf40fac16040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016133b790614b89565b602060405180830381600087803b1580156133d157600080fd5b505af11580156133e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506134099190810190614035565b73ffffffffffffffffffffffffffffffffffffffff1661244e565b878560010195508585600c020181518110151561343d57fe5b906020019060200201819052508173ffffffffffffffffffffffffffffffffffffffff16639c981fcb6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161349d90614abf565b600060405180830381600087803b1580156134b757600080fd5b505af11580156134cb573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506134f4919081019061426d565b878560010195508585600c020181518110151561350d57fe5b906020019060200201819052508280600101935050612942565b8580600101965050612916565b8697505050505050505092915050565b606080600080600360405190808252806020026020018201604052801561357f57816020015b606081526020019060019003908161356a5790505b50925061358b87613ac9565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614151561374557600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166346438ca061360789613ac9565b6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161363f9190614945565b602060405180830381600087803b15801561365957600080fd5b505af115801561366d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506136919190810190614035565b90508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614151515613705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136fc90614d99565b60405180910390fd5b6137248173ffffffffffffffffffffffffffffffffffffffff1661244e565b83600081518110151561373357fe5b90602001906020020181905250613763565b8683600081518110151561375557fe5b906020019060200201819052505b61376c86613ac9565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614151561392657600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166346438ca06137e888613ac9565b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016138209190614945565b602060405180830381600087803b15801561383a57600080fd5b505af115801561384e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506138729190810190614035565b90508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff16141515156138e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138dd90614e83565b60405180910390fd5b6139058173ffffffffffffffffffffffffffffffffffffffff1661244e565b83600181518110151561391457fe5b90602001906020020181905250613944565b8583600181518110151561393657fe5b906020019060200201819052505b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166346438ca0866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016139bb9190614945565b602060405180830381600087803b1580156139d557600080fd5b505af11580156139e9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613a0d9190810190614035565b90508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614151515613a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a7890614ccf565b60405180910390fd5b613aa08173ffffffffffffffffffffffffffffffffffffffff1661244e565b836002815181101515613aaf57fe5b906020019060200201819052508293505050509392505050565b6000606060008084925060009150600090505b8251811015613c8f5760308382815181101515613af557fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900460ff1610158015613bf3575060398382815181101515613b7f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900460ff1611155b15613c825760308382815181101515613c0857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090040360ff16600a83020191505b8080600101915050613adc565b819350505050919050565b6040805190810160405280600290602082028038833980820191505090505090565b6000613cc88235615181565b905092915050565b6000613cdc8251615181565b905092915050565b600082601f8301121515613cf757600080fd5b8135613d0a613d0582614fda565b614fad565b91508181835260208401935060208101905083856020840282011115613d2f57600080fd5b60005b83811015613d5f5781613d458882613cbc565b845260208401935060208301925050600181019050613d32565b5050505092915050565b600082601f8301121515613d7c57600080fd5b8135613d8f613d8a82615002565b614fad565b91508181835260208401935060208101905083856020840282011115613db457600080fd5b60005b83811015613de45781613dca8882613f39565b845260208401935060208301925050600181019050613db7565b5050505092915050565b600082601f8301121515613e0157600080fd5b8135613e14613e0f8261502a565b614fad565b9150818183526020840193506020810190508360005b83811015613e5a5781358601613e408882613f61565b845260208401935060208301925050600181019050613e2a565b5050505092915050565b600082601f8301121515613e7757600080fd5b8135613e8a613e8582615052565b614fad565b91508181835260208401935060208101905083856020840282011115613eaf57600080fd5b60005b83811015613edf5781613ec5888261400d565b845260208401935060208301925050600181019050613eb2565b5050505092915050565b6000613ef582516151a1565b905092915050565b6000613f0982516151b3565b905092915050565b6000613f1d82516151c5565b905092915050565b6000613f3182516151d7565b905092915050565b6000613f4582356151e9565b905092915050565b6000613f5982516151e9565b905092915050565b600082601f8301121515613f7457600080fd5b8135613f87613f828261507a565b614fad565b91508082526020830160208301858383011115613fa357600080fd5b613fae838284615221565b50505092915050565b600082601f8301121515613fca57600080fd5b8151613fdd613fd8826150a6565b614fad565b91508082526020830160208301858383011115613ff957600080fd5b614004838284615230565b50505092915050565b600061401982356151f3565b905092915050565b600061402d82516151f3565b905092915050565b60006020828403121561404757600080fd5b600061405584828501613cd0565b91505092915050565b6000806000806080858703121561407457600080fd5b600085013567ffffffffffffffff81111561408e57600080fd5b61409a87828801613ce4565b94505060206140ab8782880161400d565b935050604085013567ffffffffffffffff8111156140c857600080fd5b6140d487828801613dee565b925050606085013567ffffffffffffffff8111156140f157600080fd","5b6140fd87828801613d69565b91505092959194509250565b60008060006060848603121561411e57600080fd5b600084013567ffffffffffffffff81111561413857600080fd5b61414486828701613e64565b935050602084013567ffffffffffffffff81111561416157600080fd5b61416d86828701613ce4565b925050604084013567ffffffffffffffff81111561418a57600080fd5b61419686828701613d69565b9150509250925092565b6000602082840312156141b257600080fd5b60006141c084828501613ee9565b91505092915050565b6000602082840312156141db57600080fd5b60006141e984828501613efd565b91505092915050565b60006020828403121561420457600080fd5b600061421284828501613f11565b91505092915050565b60006020828403121561422d57600080fd5b600061423b84828501613f25565b91505092915050565b60006020828403121561425657600080fd5b600061426484828501613f4d565b91505092915050565b60006020828403121561427f57600080fd5b600082015167ffffffffffffffff81111561429957600080fd5b6142a584828501613fb7565b91505092915050565b6000602082840312156142c057600080fd5b60006142ce84828501614021565b91505092915050565b600080604083850312156142ea57600080fd5b60006142f885828601614021565b925050602083015167ffffffffffffffff81111561431557600080fd5b61432185828601613fb7565b9150509250929050565b61433481615141565b82525050565b6000614345826150fb565b8084526020840193508360208202850161435e856150d2565b60005b84811015614397578383038852614379838351614465565b925061438482615127565b9150602088019750600181019050614361565b508196508694505050505092915050565b6143b181615106565b6143ba826150df565b60005b828110156143ec576143d0858351614936565b6143d982615134565b91506020850194506001810190506143bd565b5050505050565b6143fc81615161565b82525050565b61440b816151fd565b82525050565b61441a8161520f565b82525050565b6144298161516d565b82525050565b600061443a8261511c565b80845261444e816020860160208601615230565b61445781615263565b602085010191505092915050565b600061447082615111565b808452614484816020860160208601615230565b61448d81615263565b602085010191505092915050565b6000815460018116600081146144b857600181146144d857614519565b607f600283041680865260ff198316602087015260408601935050614519565b600282048086526020860195506144ee856150e9565b60005b82811015614510578154818901526001820191506020810190506144f1565b80880195505050505b505092915050565b6000600582527f61737365740000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600782527f7375626a656374000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000601282527f6163636f756e74206e6f742076657269667900000000000000000000000000006020830152604082019050919050565b6000600282527f746f0000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600d82527f72656c617465645f6173736574000000000000000000000000000000000000006020830152604082019050919050565b6000600482527f66726f6d000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600882527f6f70657261746f720000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600782527f7465726d5f6e6f000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000601a82527f6f70657261746f72206163636f756e74206e6f7420666f756e640000000000006020830152604082019050919050565b6000600382527f73657100000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600482527f64657363000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000601682527f66726f6d206163636f756e74206e6f7420666f756e64000000000000000000006020830152604082019050919050565b6000601882527f506172616d73206973206e6f7420636f6d706c69616e636500000000000000006020830152604082019050919050565b6000600782527f626f6f6b5f6e6f000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600682527f616d6f756e7400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000601182527f777269746520626f6f6b206661696c65640000000000000000000000000000006020830152604082019050919050565b6000601482527f746f206163636f756e74206e6f7420666f756e640000000000000000000000006020830152604082019050919050565b6000601082527f7472616e73616374696f6e5f74797065000000000000000000000000000000006020830152604082019050919050565b6000600e82527f6f7065726174696f6e5f747970650000000000000000000000000000000000006020830152604082019050919050565b61493f81615177565b82525050565b600060208201905061495a600083018461432b565b92915050565b6000602082019050818103600083015261497a818461433a565b905092915050565b600060608201905061499760008301856143f3565b6149a460208301846143a8565b9392505050565b60006020820190506149c06000830184614420565b92915050565b60006040820190506149db6000830185614420565b6149e86020830184614420565b9392505050565b60006040820190508181036000830152614a09818561442f565b9050614a186020830184614402565b9392505050565b60006040820190508181036000830152614a39818561442f565b9050614a486020830184614411565b9392505050565b60006020820190508181036000830152614a69818461449b565b905092915050565b60006020820190508181036000830152614a8a81614521565b9050919050565b60006040820190508181036000830152614aaa81614521565b9050614ab9602083018461432b565b92915050565b60006020820190508181036000830152614ad881614558565b9050919050565b60006040820190508181036000830152614af881614558565b90508181036020830152614b0c8184614465565b905092915050565b60006020820190508181036000830152614b2d8161458f565b9050919050565b60006020820190508181036000830152614b4d816145c6565b9050919050565b60006040820190508181036000830152614b6d816145c6565b90508181036020830152614b81818461442f565b905092915050565b60006020820190508181036000830152614ba2816145fd565b9050919050565b60006040820190508181036000830152614bc2816145fd565b9050614bd1602083018461432b565b92915050565b60006020820190508181036000830152614bf081614634565b9050919050565b60006040820190508181036000830152614c1081614634565b90508181036020830152614c24818461442f565b905092915050565b60006020820190508181036000830152614c458161466b565b9050919050565b60006040820190508181036000830152614c658161466b565b9050614c74602083018461432b565b92915050565b60006020820190508181036000830152614c93816146a2565b9050919050565b60006040820190508181036000830152614cb3816146a2565b90508181036020830152614cc7818461442f565b905092915050565b60006020820190508181036000830152614ce8816146d9565b9050919050565b60006020820190508181036000830152614d0881614710565b9050919050565b60006040820190508181036000830152614d2881614710565b90508181036020830152614d3c818461442f565b905092915050565b60006020820190508181036000830152614d5d81614747565b9050919050565b60006040820190508181036000830152614d7d81614747565b90508181036020830152614d918184614465565b905092915050565b60006020820190508181036000830152614db28161477e565b9050919050565b60006020820190508181036000830152614dd2816147b5565b9050919050565b60006040820190508181036000830152614df2816147ec565b90508181036020830152614e06818461442f565b905092915050565b60006020820190508181036000830152614e2781614823565b9050919050565b60006040820190508181036000830152614e4781614823565b90508181036020830152614e5b818461442f565b905092915050565b60006020820190508181036000830152614e7c8161485a565b9050919050565b60006020820190508181036000830152614e9c81614891565b9050919050565b60006020820190508181036000830152614ebc816148c8565b9050919050565b60006040820190508181036000830152614edc816148c8565b9050614eeb6020830184614420565b92915050565b60006020820190508181036000830152614f0a816148ff565b9050919050565b60006040820190508181036000830152614f2a816148ff565b9050614f396020830184614420565b92915050565b6000602082019050614f546000830184614936565b92915050565b600060a082019050614f6f6000830188614936565b614f7c6020830187614936565b614f89604083018661432b565b614f96606083018561432b565b614fa36080830184614936565b9695505050505050565b6000604051905081810181811067ffffffffffffffff82111715614fd057600080fd5b8060405250919050565b600067ffffffffffffffff821115614ff157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561501957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561504157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561506957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561509157600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156150bd57600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b6000819050919050565b60008160005260","206000209050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006151ac82615141565b9050919050565b60006151be82615141565b9050919050565b60006151d082615141565b9050919050565b60006151e282615141565b9050919050565b6000819050919050565b6000819050919050565b600061520882615141565b9050919050565b600061521a82615141565b9050919050565b82818337600083830152505050565b60005b8381101561524e578082015181840152602081019050615233565b8381111561525d576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a723058205c261cad0324348dde7feb7cb637f6054e82cc7aabfc50489df4872406cc7eee6c6578706572696d656e74616cf50037"};

    public static final String BINARY = String.join("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {"60806040526040805190810160405280600681526020017f7075626c69630000000000000000000000000000000000000000000000000000815250600090805190602001906200005192919062001228565b506040805190810160405280600581526020017f6f776e6572000000000000000000000000000000000000000000000000000000815250600190805190602001906200009f92919062001228565b506040805190810160405280600581526020017f61646d696e00000000000000000000000000000000000000000000000000000081525060029080519060200190620000ed92919062001228565b506040805190810160405280600281526020017f5f72000000000000000000000000000000000000000000000000000000000000815250600390805190602001906200013b92919062001228565b506040805190810160405280600281526020017f5f77000000000000000000000000000000000000000000000000000000000000815250600490805190602001906200018992919062001228565b506040805190810160405280600381526020017f616c6c000000000000000000000000000000000000000000000000000000000081525060059080519060200190620001d792919062001228565b506040805190810160405280600281526020017f6964000000000000000000000000000000000000000000000000000000000000815250600690805190602001906200022592919062001228565b506040805190810160405280600481526020017f6164647200000000000000000000000000000000000000000000000000000000815250600790805190602001906200027392919062001228565b506040805190810160405280600481526020017f747970650000000000000000000000000000000000000000000000000000000081525060089080519060200190620002c192919062001228565b506040805190810160405280600481526020017f726f6c6500000000000000000000000000000000000000000000000000000000815250600990805190602001906200030f92919062001228565b506040805190810160405280600781526020017f7075625f6b657900000000000000000000000000000000000000000000000000815250600a90805190602001906200035d92919062001228565b506040805190810160405280600481526020017f6461746100000000000000000000000000000000000000000000000000000000815250600b9080519060200190620003ab92919062001228565b506040805190810160405280600681526020017f726f6c655f720000000000000000000000000000000000000000000000000000815250600c9080519060200190620003f992919062001228565b506040805190810160405280600681526020017f726f6c655f770000000000000000000000000000000000000000000000000000815250600d90805190602001906200044792919062001228565b506040805190810160405280600c81526020017f6f70656e696e675f62616e6b0000000000000000000000000000000000000000815250600e90805190602001906200049592919062001228565b506040805190810160405280600681526020017f6173736574730000000000000000000000000000000000000000000000000000815250600f9080519060200190620004e392919062001228565b506040805190810160405280600781526020017f62616c616e636500000000000000000000000000000000000000000000000000815250601090805190602001906200053192919062001228565b506040805190810160405280600681526020017f7265636f72640000000000000000000000000000000000000000000000000000815250601190805190602001906200057f92919062001228565b506040805190810160405280600581526020017f61646d696e00000000000000000000000000000000000000000000000000000081525060129080519060200190620005cd92919062001228565b506040805190810160405280600881526020017f6f70657261746f72000000000000000000000000000000000000000000000000815250601390805190602001906200061b92919062001228565b506040805190810160405280600581526020017f6f776e6572000000000000000000000000000000000000000000000000000000815250601490805190602001906200066992919062001228565b506040805190810160405280600481526020017f757365720000000000000000000000000000000000000000000000000000000081525060159080519060200190620006b792919062001228565b5062010001601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062010002601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062010003601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062010004601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620007d557600080fd5b50604051620111bd380380620111bd8339810180604052620007fb919081019062001575565b84828281816060620008373073ffffffffffffffffffffffffffffffffffffffff1662000dd064010000000002620072ab176401000000009004565b9050620008fd60068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015620008d75780601f10620008ab57610100808354040283529160200191620008d7565b820191906000526020600020905b815481529060010190602001808311620008b957829003601f168201915b505050505082601b62000eb4640100000000026200629417909291906401000000009004565b5082601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e92139da6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015620009c657600080fd5b505af1158015620009db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000a01919081019062001549565b601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631500025a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801562000ac857600080fd5b505af115801562000add573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000b03919081019062001549565b602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151562000bc15781601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000c03565b30601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050506000835111801562000c19575060408351105b151562000c5d576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040162000c54906200188f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663491bae946040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801562000cc257600080fd5b505af115801562000cd7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000cfd919081019062001549565b838262000d09620012af565b62000d17939291906200184b565b604051809103906000f08015801562000d34573d6000803e3d6000fd5b50602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050846028908051906020019062000d90929190620012c0565b50836027908051906020019062000da9929190620012c0565b5082602960006101000a81548160ff021916908360ff1602179055505050505050620019d3565b6060600080836c0100000000000000000000000002915060146040519080825280601f01601f19166020018201604052801562000e1c5781602001602082028038833980820191505090505b509250600090505b601481101562000ead57818160148110151562000e3d57fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002838281518110151562000e6f57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505062000e24565b5050919050565b60008084600001846040518082805190602001908083835b60208310151562000ef3578051825260208201915060208101905060208303925062000ecc565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000015490506000811115620010b0577fb842e70165ea1827273bc7a4271b485c64a747bd35bd7b804c41256bf4d5ecf132336040805190810160405280600681526020017f4d4f4449465900000000000000000000000000000000000000000000000000008152508789600001896040518082805190602001908083835b60208310151562000fcc578051825260208201915060208101905060208303925062000fa5565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020","60010160405162001015959493929190620017d9565b60405180910390a18285600001856040518082805190602001908083835b6020831015156200105a578051825260208201915060208101905060208303925062001033565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001019080519060200190620010a592919062001347565b506001915062001220565b8285600001856040518082805190602001908083835b602083101515620010ed5780518252602082019150602081019050602083039250620010c6565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060010190805190602001906200113892919062001347565b50846001018054809190600101620011519190620013ce565b90506001810185600001856040518082805190602001908083835b6020831015156200119357805182526020820191506020810190506020830392506200116c565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000181905550838560010182815481101515620011e057fe5b906000526020600020906002020160000190805190602001906200120692919062001347565b508460020160008154809291906001019190505550600091505b509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200126b57805160ff19168380011785556200129c565b828001600101855582156200129c579182015b828111156200129b5782518255916020019190600101906200127e565b5b509050620012ab919062001403565b5090565b604051615936806200b88783390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200130357805160ff191683800117855562001334565b8280016001018555821562001334579182015b828111156200133357825182559160200191906001019062001316565b5b50905062001343919062001403565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200138a57805160ff1916838001178555620013bb565b82800160010185558215620013bb579182015b82811115620013ba5782518255916020019190600101906200139d565b5b509050620013ca919062001403565b5090565b815481835581811115620013fe57600202816002028360005260206000209182019101620013fd91906200142b565b5b505050565b6200142891905b80821115620014245760008160009055506001016200140a565b5090565b90565b6200147091905b808211156200146c57600080820160006200144e919062001473565b6001820160006101000a81549060ff02191690555060020162001432565b5090565b90565b50805460018160011615610100020316600290046000825580601f106200149b5750620014bc565b601f016020900490600052602060002090810190620014bb919062001403565b5b50565b6000620014cd82516200195f565b905092915050565b600082601f8301121515620014e957600080fd5b815162001500620014fa82620018df565b620018b1565b915080825260208301602083018583830111156200151d57600080fd5b6200152a8382846200198c565b50505092915050565b60006200154182516200197f565b905092915050565b6000602082840312156200155c57600080fd5b60006200156c84828501620014bf565b91505092915050565b600080600080600060a086880312156200158e57600080fd5b600086015167ffffffffffffffff811115620015a957600080fd5b620015b788828901620014d5565b955050602086015167ffffffffffffffff811115620015d557600080fd5b620015e388828901620014d5565b9450506040620015f68882890162001533565b93505060606200160988828901620014bf565b92505060806200161c88828901620014bf565b9150509295509295909350565b62001634816200193f565b82525050565b6000620016478262001929565b8084526200165d8160208601602086016200198c565b6200166881620019c2565b602085010191505092915050565b600062001683826200191e565b808452620016998160208601602086016200198c565b620016a481620019c2565b602085010191505092915050565b600081546001811660008114620016d25760018114620016f35762001738565b607f600283041680865260ff19831660208701526040860193505062001738565b600282048086526020860195506200170b856200190c565b60005b828110156200172f578154818901526001820191506020810190506200170e565b80880195505050505b505092915050565b60006200174d8262001934565b808452620017638160208601602086016200198c565b6200176e81620019c2565b602085010191505092915050565b6000603282527f61737365744e616d652073686f756c64206265206e6f74206e756c6c20616e6460208301527f206c657373207468616e203634206c6f6e6700000000000000000000000000006040830152606082019050919050565b600060a082019050620017f0600083018862001629565b620017ff602083018762001629565b818103604083015262001813818662001676565b905081810360608301526200182981856200163a565b905081810360808301526200183f8184620016b2565b90509695505050505050565b600060608201905062001862600083018662001629565b818103602083015262001876818562001740565b905062001887604083018462001629565b949350505050565b60006020820190508181036000830152620018aa816200177c565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620018d557600080fd5b8060405250919050565b600067ffffffffffffffff821115620018f757600080fd5b601f19601f8301169050602081019050919050565b60008160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060ff82169050919050565b60005b83811015620019ac5780820151818401526020810190506200198f565b83811115620019bc576000848401525b50505050565b6000601f19601f8301169050919050565b619ea480620019e36000396000f3006080604052600436106102a9576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806309108b17146102ae5780630bc95c79146102eb5780630c9481b9146103165780630d56ef0014610341578063112da3031461037f57806311567c42146103aa5780631500025a146103d55780631a1f1cd2146104005780632fe7f81a1461042b5780633055ae8114610468578063366563dd146104a557806342033801146104e25780634425c4261461050d57806346b136151461053857806347a6caff1461056357806351cf7708146105a0578063567f2836146105dd5780635bfa2796146106085780635c7540bc146106335780635edfd6fa1461065e5780635f12ec2e1461068957806361e020cb146106b457806367e09af5146106f157806374b00d531461071c578063769fe342146107475780637de83c70146107725780637e3a1ef4146107af5780637e6f287c146107da5780637f00af97146108175780637f610782146108425780638a4451f5146108805780638ed13ef5146108ab57806398068364146108e8578063a4fd771114610913578063a74809a514610950578063ad07c37a1461098e578063b09a50fe146109cb578063b11b6883146109f6578063b1d2284f14610a21578063b32941d814610a5f578063bcc6cdb614610a8a578063bced953514610ab5578063bf0e94fe14610ae0578063bfabb86d14610b1d578063c03fd5e714610b48578063c6125d0c14610b73578063d1281a7814610b9e578063d3e9af5a14610bc9578063d617f06d14610bf4578063d7e7948f14610c1f578063e3fbfc3f14610c4a578063e92139da14610c87578063ece272e314610cb2578063ee19b0cf14610cdd578063f0c9f25a14610d08578063f6cb4bc514610d45578063f976699414610d70575b600080fd5b3480156102ba57600080fd5b506102d560048036036102d09190810190618095565b610dad565b6040516102e29190619617565b60405180910390f35b3480156102f757600080fd5b506103006114dd565b60405161030d9190619098565b60405180910390f35b34801561032257600080fd5b5061032b611503565b604051610338919061968b565b60405180910390f35b34801561034d57600080fd5b506103686004803603610363919081019061810d565b6115a1565b604051610376929190619632565b60405180910390f35b34801561038b57600080fd5b50610394611825565b6040516103a1919061968b565b60405180910390f35b3480156103b657600080fd5b506103bf6118c3565b6040516103cc9190619098565b60405180910390f35b3480156103e157600080fd5b506103ea6118cb565b6040516103f79190619098565b60405180910390f35b34801561040c57600080fd5b50610415611990565b604051610422919061968b565b60405180910390f35b34801561043757600080fd5b50610452600480360361044d9190810190618095565b611a2e565b60405161045f9190619a4a565b60405180910390f35b34801561047457600080fd5b5061048f600480360361048a9190810190618388565b611e1f565b60405161049c91906196ad565b60405180910390f35b3480156104b157600080fd5b506104cc60048036036104c7919081019061820e565b61201a565b6040516104d99190619a4a565b60405180910390f35b3480156104ee57600080fd5b506104f7612321565b604051610504919061968b565b60405180910390f35b34801561051957600080fd5b506105226123bf565b60405161052f9190619a4a565b60405180910390f35b34801561054457600080fd5b5061054d6123e5565b60405161055a9190619ab8565b60405180910390f35b34801561056f57600080fd5b5061058a60048036036105859190810190618489565b6123f8565b6040516105979190619617565b60405180910390f35b3480156105ac57600080fd5b506105c760048036036105c29190810190618489565b612630565b6040516105d49190619617565b60405180910390f35b3480156105e957600080fd5b506105f2612868565b6040516105ff9190619a4a565b60405180910390f35b34801561061457600080fd5b5061061d61287256","5b60405161062a9190619706565b60405180910390f35b34801561063f57600080fd5b50610648612910565b6040516106559190619098565b60405180910390f35b34801561066a57600080fd5b5061067361293a565b604051610680919061968b565b60405180910390f35b34801561069557600080fd5b5061069e6129d8565b6040516106ab9190619098565b60405180910390f35b3480156106c057600080fd5b506106db60048036036106d6919081019061841d565b612a02565b6040516106e89190619617565b60405180910390f35b3480156106fd57600080fd5b50610706612c00565b604051610713919061968b565b60405180910390f35b34801561072857600080fd5b50610731612c9e565b60405161073e9190619098565b60405180910390f35b34801561075357600080fd5b5061075c612cc4565b604051610769919061968b565b60405180910390f35b34801561077e57600080fd5b506107996004803603610794919081019061820e565b612d62565b6040516107a6919061952d565b60405180910390f35b3480156107bb57600080fd5b506107c461315f565b6040516107d1919061968b565b60405180910390f35b3480156107e657600080fd5b5061080160048036036107fc9190810190618388565b6131fd565b60405161080e9190619617565b60405180910390f35b34801561082357600080fd5b5061082c6133f8565b604051610839919061968b565b60405180910390f35b34801561084e57600080fd5b506108696004803603610864919081019061814e565b613496565b604051610877929190619662565b60405180910390f35b34801561088c57600080fd5b506108956134d5565b6040516108a29190619098565b60405180910390f35b3480156108b757600080fd5b506108d260048036036108cd9190810190618489565b6134fb565b6040516108df9190619617565b60405180910390f35b3480156108f457600080fd5b506108fd613733565b60405161090a919061968b565b60405180910390f35b34801561091f57600080fd5b5061093a6004803603610935919081019061841d565b6137d1565b6040516109479190619617565b60405180910390f35b34801561095c57600080fd5b506109776004803603610972919081019061814e565b6139cf565b604051610985929190619662565b60405180910390f35b34801561099a57600080fd5b506109b560048036036109b0919081019061841d565b613f72565b6040516109c29190619617565b60405180910390f35b3480156109d757600080fd5b506109e0614170565b6040516109ed919061968b565b60405180910390f35b348015610a0257600080fd5b50610a0b61420e565b604051610a189190619706565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603610a43919081019061814e565b6142ac565b604051610a56929190619662565b60405180910390f35b348015610a6b57600080fd5b50610a74614688565b604051610a81919061968b565b60405180910390f35b348015610a9657600080fd5b50610a9f614726565b604051610aac919061968b565b60405180910390f35b348015610ac157600080fd5b50610aca6147c4565b604051610ad7919061968b565b60405180910390f35b348015610aec57600080fd5b50610b076004803603610b029190810190618278565b614862565b604051610b1491906195a9565b60405180910390f35b348015610b2957600080fd5b50610b326151b9565b604051610b3f919061968b565b60405180910390f35b348015610b5457600080fd5b50610b5d615257565b604051610b6a9190619098565b60405180910390f35b348015610b7f57600080fd5b50610b8861527d565b604051610b95919061968b565b60405180910390f35b348015610baa57600080fd5b50610bb361531b565b604051610bc0919061968b565b60405180910390f35b348015610bd557600080fd5b50610bde6153b9565b604051610beb9190619a4a565b60405180910390f35b348015610c0057600080fd5b50610c096153ca565b604051610c16919061968b565b60405180910390f35b348015610c2b57600080fd5b50610c34615468565b604051610c41919061968b565b60405180910390f35b348015610c5657600080fd5b50610c716004803603610c6c91908101906183c9565b615506565b604051610c7e9190619617565b60405180910390f35b348015610c9357600080fd5b50610c9c615729565b604051610ca99190619098565b60405180910390f35b348015610cbe57600080fd5b50610cc76157ee565b604051610cd4919061968b565b60405180910390f35b348015610ce957600080fd5b50610cf261588c565b604051610cff919061968b565b60405180910390f35b348015610d1457600080fd5b50610d2f6004803603610d2a919081019061820e565b61592a565b604051610d3c9190619a4a565b60405180910390f35b348015610d5157600080fd5b50610d5a615c3d565b604051610d67919061968b565b60405180910390f35b348015610d7c57600080fd5b50610d976004803603610d9291908101906183c9565b615cdb565b604051610da491906196ad565b60405180910390f35b6000806060600080600087601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663520bdf0a826040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610e2f9190619098565b602060405180830381600087803b158015610e4957600080fd5b505af1158015610e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e819190810190618323565b1515610ec2576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610eb99061976a565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9f854c08a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610f399190619098565b602060405180830381600087803b158015610f5357600080fd5b505af1158015610f67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f8b919081019061806c565b9550602460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151561101c576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016110139061974a565b60405180910390fd5b61102f8986615efd90919063ffffffff16565b9450601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfe3b125601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630888c6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016110d09493929190619444565b6040805180830381600087803b1580156110e957600080fd5b505af11580156110fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061112191908101906180d1565b809450819550505082151561116b576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016111629061980a565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663520bdf0a856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016111e29190619098565b602060405180830381600087803b1580156111fc57600080fd5b505af1158015611210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112349190810190618323565b1515611275576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161126c9061976a565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327033e768a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016112ec9190619098565b602060405180830381600087803b15801561130657600080fd5b505af115801561131a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061133e919081019061806c565b91508173ffffffffffffffffffffffffffffffffffffffff1663a8cced2030601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518463ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016113bc939291906196cf565b602060405180830381600087803b1580156113d657600080fd5b505af11580156113ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061140e9190810190618323565b5060238690806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506001602460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001965050505050505092915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115995780601f1061156e57610100808354040283529160200191611599565b820191906000526020600020905b81548152906001019060200180831161157c57829003601f168201915b505050505081565b6000606080600080600086516040519080825280602002602001820160405280156115db5781602001602082028038833980820191505090505b509350600090505b86518110156118155760018114806116565750600587511480156116075750600481145b806116555750868181518110151561161b57fe5b90","60200190602002015173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff16145b5b156116c257868181518110151561166957fe5b90602001906020020151848281518110151561168157fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611808565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e628322888381518110151561170e57fe5b906020019060200201516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016117509190619098565b6040805180830381600087803b15801561176957600080fd5b505af115801561177d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506117a191908101906180d1565b80945081935050508215156117bc576000849550955061181c565b8184828151811015156117cb57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b80806001019150506115e3565b8284955095505b50505050915091565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118bb5780601f10611890576101008083540402835291602001916118bb565b820191906000526020600020905b81548152906001019060200180831161189e57829003601f168201915b505050505081565b600030905090565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631500025a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561195357600080fd5b505af1158015611967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061198b919081019061806c565b905090565b60158054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a265780601f106119fb57610100808354040283529160200191611a26565b820191906000526020600020905b815481529060010190602001808311611a0957829003601f168201915b505050505081565b6000806060600080601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9f854c0886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611aad9190619098565b602060405180830381600087803b158015611ac757600080fd5b505af1158015611adb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611aff919081019061806c565b9350602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611b8f576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611b869061998a565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfe3b125601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686868a6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611c2e94939291906191c9565b6040805180830381600087803b158015611c4757600080fd5b505af1158015611c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c7f91908101906180d1565b8092508193505050801515611cc9576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611cc09061982a565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663520bdf0a836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611d409190619098565b602060405180830381600087803b158015611d5a57600080fd5b505af1158015611d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d929190810190618323565b1515611dd3576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611dca9061976a565b60405180910390fd5b602560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205494505050505092915050565b6060601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d478f2933601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630611f3160038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f1d5780601f10611ef257610100808354040283529160200191611f1d565b820191906000526020600020905b815481529060010190602001808311611f0057829003601f168201915b505050505088615f1990919063ffffffff16565b6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611f6c94939291906190b3565b602060405180830381600087803b158015611f8657600080fd5b505af1158015611f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611fbe9190810190618323565b1515611fff576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611ff6906198aa565b60405180910390fd5b61201382601b615f2d90919063ffffffff16565b9050919050565b60006060600080600080601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfe3b125601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630888b6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016120c39493929190619324565b6040805180830381600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061211491908101906180d1565b809450819550505082151561215e576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161215590619a2a565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663520bdf0a856040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016121d59190619098565b602060405180830381600087803b1580156121ef57600080fd5b505af1158015612203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506122279190810190618323565b1515612268576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161225f9061976a565b60405180910390fd5b600090505b602380549050811015612314576123056025600060238481548110151561229057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361604090919063ffffffff16565b9150808060010191505061226d565b8195505050505050919050565b60138054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123b75780601f1061238c576101008083540402835291602001916123b7565b820191906000526020600020905b81548152906001019060200180831161239a57829003601f168201915b505050505081565b60006123d7600160215461604090919063ffffffff16565b602181905550602154905090565b602960009054906101000a900460ff1681565b60006060600080612424866124168986615f1990919063ffffffff16565b615f1990919063ffffffff16565b9250601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfe3b125601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061253560048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156125215780601f106124f657610100808354040283529160200191612521565b820191906000526020600020905b81548152906001019060200180831161250457829003601f168201915b50505050508c615f1990919063ffffffff16565b878a6040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612573959493929190619260565b6040805180830381600087803b15801561258c57600080fd5b505af11580156125a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125c491908101906180d1565b809250819350505080151561260e576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016126059061996a565b60405180910390fd5b6126248787601b61609790929190","63ffffffff16565b93505050509392505050565b6000606060008061265c8661264e8986615f1990919063ffffffff16565b615f1990919063ffffffff16565b9250601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfe3b125601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061276d60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127595780601f1061272e57610100808354040283529160200191612759565b820191906000526020600020905b81548152906001019060200180831161273c57829003601f168201915b50505050508c615f1990919063ffffffff16565b878a6040518663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016127ab959493929190619260565b6040805180830381600087803b1580156127c457600080fd5b505af11580156127d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127fc91908101906180d1565b8092508193505050801515612846576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161283d906199ea565b60405180910390fd5b61285c8787601b6162949092919063ffffffff16565b93505050509392505050565b6000602154905090565b60278054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129085780601f106128dd57610100808354040283529160200191612908565b820191906000526020600020905b8154815290600101906020018083116128eb57829003601f168201915b505050505081565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129d05780601f106129a5576101008083540402835291602001916129d0565b820191906000526020600020905b8154815290600101906020018083116129b357829003601f168201915b505050505081565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d478f2933601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630612b1460048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612b005780601f10612ad557610100808354040283529160200191612b00565b820191906000526020600020905b815481529060010190602001808311612ae357829003601f168201915b505050505089615f1990919063ffffffff16565b6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612b4f94939291906190b3565b602060405180830381600087803b158015612b6957600080fd5b505af1158015612b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ba19190810190618323565b1515612be2576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401612bd9906199ea565b60405180910390fd5b612bf88383601b6162949092919063ffffffff16565b905092915050565b600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612c965780601f10612c6b57610100808354040283529160200191612c96565b820191906000526020600020905b815481529060010190602001808311612c7957829003601f168201915b505050505081565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612d5a5780601f10612d2f57610100808354040283529160200191612d5a565b820191906000526020600020905b815481529060010190602001808311612d3d57829003601f168201915b505050505081565b60608060008060606000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfe3b125601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630888b6040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612e0b9493929190619384565b6040805180830381600087803b158015612e2457600080fd5b505af1158015612e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612e5c91908101906180d1565b8094508195505050821515612ea6576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401612e9d906197ea565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663520bdf0a856040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612f1d9190619098565b602060405180830381600087803b158015612f3757600080fd5b505af1158015612f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f6f9190810190618323565b1515612fb0576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401612fa79061976a565b60405180910390fd5b602380549050604051908082528060200260200182016040528015612fe45781602001602082028038833980820191505090505b509150600090505b60238054905081101561315257601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4dcade660238381548110151561304657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016130a99190619098565b602060405180830381600087803b1580156130c357600080fd5b505af11580156130d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506130fb919081019061806c565b828281518110151561310957fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050612fec565b8195505050505050919050565b60018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156131f55780601f106131ca576101008083540402835291602001916131f5565b820191906000526020600020905b8154815290600101906020018083116131d857829003601f168201915b505050505081565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d478f2933601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061330f60048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156132fb5780601f106132d0576101008083540402835291602001916132fb565b820191906000526020600020905b8154815290600101906020018083116132de57829003601f168201915b505050505088615f1990919063ffffffff16565b6040518563ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161334a94939291906190b3565b602060405180830381600087803b15801561336457600080fd5b505af1158015613378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061339c9190810190618323565b15156133dd576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016133d490619a0a565b60405180910390fd5b6133f182601b6165f190919063ffffffff16565b9050919050565b60088054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561348e5780601f106134635761010080835404028352916020019161348e565b820191906000526020600020905b81548152906001019060200180831161347157829003601f168201915b505050505081565b60006134a06179f3565b602960009054906101000a900460ff1660ff16600a0a860295506134c78787878787616843565b915091509550959350505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006060600080613527866135198986615f1990919063ffffffff16565b615f1990919063ffffffff16565b9250601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfe3b125601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061363860048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156136245780601f106135f957610100808354040283529160200191613624565b820191906000526020600020905b815481529060010190602001808311613607578290","03601f168201915b50505050508c615f1990919063ffffffff16565b878a6040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401613676959493929190619260565b6040805180830381600087803b15801561368f57600080fd5b505af11580156136a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506136c791908101906180d1565b8092508193505050801515613711576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401613708906197aa565b60405180910390fd5b6137278787601b616c1f9092919063ffffffff16565b93505050509392505050565b60078054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156137c95780601f1061379e576101008083540402835291602001916137c9565b820191906000526020600020905b8154815290600101906020018083116137ac57829003601f168201915b505050505081565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d478f2933601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306138e360048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156138cf5780601f106138a4576101008083540402835291602001916138cf565b820191906000526020600020905b8154815290600101906020018083116138b257829003601f168201915b505050505089615f1990919063ffffffff16565b6040518563ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161391e94939291906190b3565b602060405180830381600087803b15801561393857600080fd5b505af115801561394c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506139709190810190618323565b15156139b1576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016139a8906197aa565b60405180910390fd5b6139c78383601b616c1f9092919063ffffffff16565b905092915050565b60006139d96179f3565b606060006139e56179f3565b613a288a8a8a8a8a6040805190810160405280600881526020017f7472616e73666572000000000000000000000000000000000000000000000000815250616e14565b9950602460008b6002815181101515613a3d57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515613ad0576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401613ac79061998a565b60405180910390fd5b602460008b6003815181101515613ae357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515613b76576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401613b6d9061998a565b60405180910390fd5b613be089602560008d6002815181101515613b8d57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461703990919063ffffffff16565b602560008c6002815181101515613bf357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ca589602560008d6003815181101515613c5257fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461604090919063ffffffff16565b602560008c6003815181101515613cb857fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002604051908082528060200260200182016040528015613d305781602001602082028038833980820191505090505b5092506002836000815181101515613d4457fe5b9060200190602002018181525050876000815181101515613d6157fe5b90602001906020020151836001815181101515613d7a57fe5b90602001906020020181815250507f18f84334255a242551aa98c68047b5da8063eab9fbeaec1eddeea280044b9ff18a6002815181101515613db857fe5b906020019060200201518b6003815181101515613dd157fe5b906020019060200201518b604051613deb93929190619229565b60405180910390a1602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318768d1e8b8b8a876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401613e70949392919061954f565b606060405180830381600087803b158015613e8a57600080fd5b505af1158015613e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613ec2919081019061834c565b80925081935050507f370fc1741645a856379d1c2be6c9f567fa67f594a8b02fa03d83b70ebe8958dc816000600281101515613efa57fe5b6020020151826001600281101515613f0e57fe5b60200201518c6002815181101515613f2257fe5b906020019060200201518d6003815181101515613f3b57fe5b906020019060200201518d604051613f57959493929190619a65565b60405180910390a18181945094505050509550959350505050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d478f2933601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061408460048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156140705780601f1061404557610100808354040283529160200191614070565b820191906000526020600020905b81548152906001019060200180831161405357829003601f168201915b505050505089615f1990919063ffffffff16565b6040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016140bf94939291906190b3565b602060405180830381600087803b1580156140d957600080fd5b505af11580156140ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506141119190810190618323565b1515614152576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016141499061996a565b60405180910390fd5b6141688383601b6160979092919063ffffffff16565b905092915050565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156142065780601f106141db57610100808354040283529160200191614206565b820191906000526020600020905b8154815290600101906020018083116141e957829003601f168201915b505050505081565b60288054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156142a45780601f10614279576101008083540402835291602001916142a4565b820191906000526020600020905b81548152906001019060200180831161428757829003601f168201915b505050505081565b60006142b66179f3565b6000606060006142c46179f3565b6143078b8b8b8b8b6040805190810160405280600a81526020017f7769746864726177616c00000000000000000000000000000000000000000000815250617090565b9a508a600281518110151561431857fe5b906020019060200201519350602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615156143b2576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016143a99061998a565b60405180910390fd5b6144048a602560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461703990919063ffffffff16565b602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026040519080825280602002602001820160405280156144775781602001602082028038833980820191505090505b509250600183600081518110151561448b57fe5b90602001906020020181815250508860008151811015156144a857fe5b906020019060200201518360018151811015156144c157fe5b90602001906020020181815250507f338e424d2d05f70468ec496a5da66a545913d90926ffae6c08c12b9d003ec6cb848b604051614500929190619504565b60405180910390a1602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318768d1e8c8c8b876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401614585949392919061954f565b606060405180830381600087803b15801561459f57600080fd5b505af11580156145b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506145d7919081019061834c565b80925081935050507f370fc1741645a856379d1c2be6c9f567fa67f594a8b02fa03d83b70ebe8958dc81600060028110151561460f57fe5b60200201518260016002811015","1561462357fe5b60200201518d600281518110151561463757fe5b906020019060200201518e600381518110151561465057fe5b906020019060200201518e60405161466c959493929190619a65565b60405180910390a1818195509550505050509550959350505050565b60148054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561471e5780601f106146f35761010080835404028352916020019161471e565b820191906000526020600020905b81548152906001019060200180831161470157829003601f168201915b505050505081565b60128054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156147bc5780601f10614791576101008083540402835291602001916147bc565b820191906000526020600020905b81548152906001019060200180831161479f57829003601f168201915b505050505081565b60118054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561485a5780601f1061482f5761010080835404028352916020019161485a565b820191906000526020600020905b81548152906001019060200180831161483d57829003601f168201915b505050505081565b6060806000806000806060600080601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfe3b125601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16308b8e6040518563ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161490f94939291906194a4565b6040805180830381600087803b15801561492857600080fd5b505af115801561493c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061496091908101906180d1565b80975081985050508515156149aa576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016149a1906199ca565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663520bdf0a886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401614a219190619098565b602060405180830381600087803b158015614a3b57600080fd5b505af1158015614a4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250614a739190810190618323565b1515614ab4576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401614aab9061976a565b60405180910390fd5b60028b51148015614af457508a6001815181101515614acf57fe5b906020019060200201518b6000815181101515614ae857fe5b90602001906020020151125b1515614b35576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401614b2c9061988a565b60405180910390fd5b60008c511115614baf57600093505b8b51841015614bae578b84815181101515614b5b57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415614ba15760019450614bae565b8380600101945050614b44565b5b841515614c8257601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d2eef3a1886040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401614c2d9190619098565b602060405180830381600087803b158015614c4757600080fd5b505af1158015614c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250614c7f9190810190618323565b94505b841515614cc4576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401614cbb9061984a565b60405180910390fd5b60006023805490501415614cda578298506151a9565b60008c51118015614d305750600073ffffffffffffffffffffffffffffffffffffffff168c6000815181101515614d0d57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b15614ed757601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9f854c08d6000815181101515614d8257fe5b906020019060200201516040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401614dc49190619098565b602060405180830381600087803b158015614dde57600080fd5b505af1158015614df2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250614e16919081019061806c565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515614e8a576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401614e81906199aa565b60405180910390fd5b818c6000815181101515614e9a57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b60018c51118015614f2d5750600073ffffffffffffffffffffffffffffffffffffffff168c6001815181101515614f0a57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b156150d457601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9f854c08d6001815181101515614f7f57fe5b906020019060200201516040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401614fc19190619098565b602060405180830381600087803b158015614fdb57600080fd5b505af1158015614fef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250615013919081019061806c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515615087576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161507e9061978a565b60405180910390fd5b808c600181518110151561509757fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b32cf81b8e8e8e6040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161514f939291906195cb565b600060405180830381600087803b15801561516957600080fd5b505af115801561517d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506151a69190810190618237565b98505b5050505050505050949350505050565b60048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561524f5780601f106152245761010080835404028352916020019161524f565b820191906000526020600020905b81548152906001019060200180831161523257829003601f168201915b505050505081565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156153135780601f106152e857610100808354040283529160200191615313565b820191906000526020600020905b8154815290600101906020018083116152f657829003601f168201915b505050505081565b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156153b15780601f10615386576101008083540402835291602001916153b1565b820191906000526020600020905b81548152906001019060200180831161539457829003601f168201915b505050505081565b60006153c5601b61729d565b905090565b600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156154605780601f1061543557610100808354040283529160200191615460565b820191906000526020600020905b81548152906001019060200180831161544357829003601f168201915b505050505081565b60108054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156154fe5780601f106154d3576101008083540402835291602001916154fe565b820191906000526020600020905b8154815290600101906020018083116154e157829003601f168201915b505050505081565b600060606000806155208684615f1990919063ffffffff16565b9250601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfe3b125601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163061563160048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561561d5780601f106155f25761010080835404028352916020019161561d565b820191906000526020600020905b81548152906001019060200180831161560057829003601f16820191","5b50505050508b615f1990919063ffffffff16565b878a6040518663ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161566f959493929190619260565b6040805180830381600087803b15801561568857600080fd5b505af115801561569c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506156c091908101906180d1565b809250819350505080151561570a576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161570190619a0a565b60405180910390fd5b61571e86601b6165f190919063ffffffff16565b935050505092915050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e92139da6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156157b157600080fd5b505af11580156157c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506157e9919081019061806c565b905090565b600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156158845780601f1061585957610100808354040283529160200191615884565b820191906000526020600020905b81548152906001019060200180831161586757829003601f168201915b505050505081565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156159225780601f106158f757610100808354040283529160200191615922565b820191906000526020600020905b81548152906001019060200180831161590557829003601f168201915b505050505081565b60006060600080601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfe3b125601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163086896040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016159d094939291906193e4565b6040805180830381600087803b1580156159e957600080fd5b505af11580156159fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250615a2191908101906180d1565b8092508193505050801515615a6b576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401615a62906198ca565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663520bdf0a836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401615ae29190619098565b602060405180830381600087803b158015615afc57600080fd5b505af1158015615b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250615b349190810190618323565b1515615b75576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401615b6c9061976a565b60405180910390fd5b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166345be589e6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015615bfb57600080fd5b505af1158015615c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250615c339190810190618508565b9350505050919050565b600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015615cd35780601f10615ca857610100808354040283529160200191615cd3565b820191906000526020600020905b815481529060010190602001808311615cb657829003601f168201915b505050505081565b606080600080615cf48684615f1990919063ffffffff16565b9250601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfe3b125601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630615e0560038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015615df15780601f10615dc657610100808354040283529160200191615df1565b820191906000526020600020905b815481529060010190602001808311615dd457829003601f168201915b50505050508b615f1990919063ffffffff16565b878a6040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401615e43959493929190619260565b6040805180830381600087803b158015615e5c57600080fd5b505af1158015615e70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250615e9491908101906180d1565b8092508193505050801515615ede576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401615ed5906198aa565b60405180910390fd5b615ef286601b615f2d90919063ffffffff16565b935050505092915050565b6060615f1183615f0c846172ab565b61738a565b905092915050565b6060615f25838361738a565b905092915050565b606082600001826040518082805190602001908083835b602083101515615f695780518252602082019150602081019050602083039250615f44565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156160335780601f1061600857610100808354040283529160200191616033565b820191906000526020600020905b81548152906001019060200180831161601657829003601f168201915b5050505050905092915050565b600080828401905083811015151561608d576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016160849061986a565b60405180910390fd5b8091505092915050565b60008084600001846040518082805190602001908083835b6020831015156160d457805182526020820191506020810190506020830392506160af565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000015490506000811115616287577fb842e70165ea1827273bc7a4271b485c64a747bd35bd7b804c41256bf4d5ecf132336040805190810160405280600681526020017f4d4f4449465900000000000000000000000000000000000000000000000000008152508789600001896040518082805190602001908083835b6020831015156161aa5780518252602082019150602081019050602083039250616185565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001016040516161f1959493929190619161565b60405180910390a18285600001856040518082805190602001908083835b602083101515616234578051825260208201915060208101905060208303925061620f565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600101908051906020019061627d929190617a15565b506001915061628c565b600091505b509392505050565b60008084600001846040518082805190602001908083835b6020831015156162d157805182526020820191506020810190506020830392506162ac565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000015490506000811115616484577fb842e70165ea1827273bc7a4271b485c64a747bd35bd7b804c41256bf4d5ecf132336040805190810160405280600681526020017f4d4f4449465900000000000000000000000000000000000000000000000000008152508789600001896040518082805190602001908083835b6020831015156163a75780518252602082019150602081019050602083039250616382565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001016040516163ee959493929190619161565b60405180910390a18285600001856040518082805190602001908083835b602083101515616431578051825260208201915060208101905060208303925061640c565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600101908051906020019061647a929190617a15565b50600191506165e9565b8285600001856040518082805190602001908083835b6020831015156164bf578051825260208201915060208101905060208303925061649a565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001019080519060200190616508929190617a15565b5084600101805480919060010161651f9190617a95565b90506001810185600001856040518082805190602001908083835b60208310151561655f578051825260208201915060208101905060208303925061653a565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600001819055508385600101828154811015156165ab57fe5b906000526020600020906002020160000190805190602001906165cf929190617a15565b508460020160008154809291906001019190505550600091505b509392505050565b60008083600001836040518082805190602001908083835b60208310151561662e57805182526020820191","50602081019050602083039250616609565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000015490506000811415616679576000915061683c565b7fb842e70165ea1827273bc7a4271b485c64a747bd35bd7b804c41256bf4d5ecf132336040805190810160405280600681526020017f44454c45544500000000000000000000000000000000000000000000000000008152508688600001886040518082805190602001908083835b60208310151561670d57805182526020820191506020810190506020830392506166e8565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020600101604051616754959493929190619161565b60405180910390a183600001836040518082805190602001908083835b6020831015156167965780518252602082019150602081019050602083039250616771565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000808201600090556001820160006167e29190617ac7565b5050600184600101600183038154811015156167fa57fe5b906000526020600020906002020160010160006101000a81548160ff021916908315150217905550836002016000815480929190600190039190505550600191505b5092915050565b600061684d6179f3565b60006060600061685b6179f3565b61689e8b8b8b8b8b6040805190810160405280600781526020017f6465706f73697400000000000000000000000000000000000000000000000000815250617090565b9a508a60038151811015156168af57fe5b906020019060200201519350602460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515616949576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016169409061998a565b60405180910390fd5b61699b8a602560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461604090919063ffffffff16565b602560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002604051908082528060200260200182016040528015616a0e5781602001602082028038833980820191505090505b5092506000836000815181101515616a2257fe5b9060200190602002018181525050886000815181101515616a3f57fe5b90602001906020020151836001815181101515616a5857fe5b90602001906020020181815250507fa4039d5990211fad3a15bf41bd09d8f68f647d8c1ab1b8d8500b7d6202087d04848b604051616a97929190619504565b60405180910390a1602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318768d1e8c8c8b876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401616b1c949392919061954f565b606060405180830381600087803b158015616b3657600080fd5b505af1158015616b4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250616b6e919081019061834c565b80925081935050507f370fc1741645a856379d1c2be6c9f567fa67f594a8b02fa03d83b70ebe8958dc816000600281101515616ba657fe5b6020020151826001600281101515616bba57fe5b60200201518d6002815181101515616bce57fe5b906020019060200201518e6003815181101515616be757fe5b906020019060200201518e604051616c03959493929190619a65565b60405180910390a1818195509550505050509550959350505050565b60008084600001846040518082805190602001908083835b602083101515616c5c5780518252602082019150602081019050602083039250616c37565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206000015490506000811115616ca75760009150616e0c565b8285600001856040518082805190602001908083835b602083101515616ce25780518252602082019150602081019050602083039250616cbd565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390206001019080519060200190616d2b929190617a15565b50846001018054809190600101616d429190617a95565b90506001810185600001856040518082805190602001908083835b602083101515616d825780518252602082019150602081019050602083039250616d5d565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060000181905550838560010182815481101515616dce57fe5b90600052602060002090600202016000019080519060200190616df2929190617a15565b508460020160008154809291906001019190505550600191505b509392505050565b606060006060600080616e278a8961755b565b50616e348b8b8b8b6176bc565b9250616e3f8b6115a1565b809c508195505050831515616e89576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401616e809061990a565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfe3b125601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168d6002815181101515616ef957fe5b9060200190602002015189878c6040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401616f429594939291906190ff565b6040805180830381600087803b158015616f5b57600080fd5b505af1158015616f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250616f9391908101906180d1565b809250819350505080616fe4876040805190810160405280600a81526020017f466f7262696464656e20000000000000000000000000000000000000000000008152506177c290919063ffffffff16565b901515617027576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161701e9190619728565b60405180910390fd5b508a9450505050509695505050505050565b600080838311151515617081576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016170789061994a565b60405180910390fd5b82840390508091505092915050565b6060600060606000806170a38a8961755b565b506170b08b8b8b8b6176bc565b92506170bb8b6115a1565b809c508195505050831515617105576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016170fc9061990a565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cfe3b125601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163089878c6040518663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016171a69594939291906192c2565b6040805180830381600087803b1580156171bf57600080fd5b505af11580156171d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506171f791908101906180d1565b809250819350505080617248876040805190810160405280600a81526020017f466f7262696464656e20000000000000000000000000000000000000000000008152506177c290919063ffffffff16565b90151561728b576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016172829190619728565b60405180910390fd5b508a9450505050509695505050505050565b600081600201549050919050565b6060600080836c0100000000000000000000000002915060146040519080825280601f01601f1916602001820160405280156172f65781602001602082028038833980820191505090505b509250600090505b601481101561738357818160148110151561731557fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002838281518110151561734657fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506172fe565b5050919050565b606080606080606060008088955087945084518651016040519080825280601f01601f1916602001820160405280156173d25781602001602082028038833980820191505090505b50935083925060009150600090505b85518110156174945785818151811015156173f857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561745757fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506173e1565b600090505b845181101561754c5784818151811015156174b057fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561750f57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050617499565b83965050505050505092915050565b600080831115156175a1576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401617598906197ca565b60405180910390fd5b60008260008151811015156175b257fe5b90602001906020020151511180156175e3575060ff8260008151811015156175d657fe5b9060200190602002015151105b1515617624576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161761b906198ea565b60","405180910390fd5b6001825111156176b257600082600181518110151561763f57fe5b9060200190602002015151118015617670575060ff82600181518110151561766357fe5b9060200190602002015151105b15156176b1576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016176a89061992a565b60405180910390fd5b5b6001905092915050565b606080600080600080600093505b895184101561770c576176fd8a858151811015156176e457fe5b9060200190602002015186615efd90919063ffffffff16565b945083806001019450506176ca565b61771f898661799390919063ffffffff16565b9450600092505b875183101561776b57878381518110151561773d57fe5b90602001906020020151915061775c828661799390919063ffffffff16565b94508280600101935050617726565b600090505b86518110156177b2576177a3878281518110151561778a57fe5b9060200190602002015186615f1990919063ffffffff16565b94508080600101915050617770565b8495505050505050949350505050565b606080606080606060008088955087945084518651016040519080825280601f01601f19166020018201604052801561780a5781602001602082028038833980820191505090505b50935083925060009150600090505b85518110156178cc57858181518110151561783057fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561788f57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050617819565b600090505b84518110156179845784818151811015156178e857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561794757fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506178d1565b83965050505050505092915050565b60606179a7836179a2846179af565b61738a565b905092915050565b606060206040519080825280601f01601f1916602001820160405280156179e55781602001602082028038833980820191505090505b509050816020820152919050565b6040805190810160405280600290602082028038833980820191505090505090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10617a5657805160ff1916838001178555617a84565b82800160010185558215617a84579182015b82811115617a83578251825591602001919060010190617a68565b5b509050617a919190617b0f565b5090565b815481835581811115617ac257600202816002028360005260206000209182019101617ac19190617b34565b5b505050565b50805460018160011615610100020316600290046000825580601f10617aed5750617b0c565b601f016020900490600052602060002090810190617b0b9190617b0f565b5b50565b617b3191905b80821115617b2d576000816000905550600101617b15565b5090565b90565b617b7491905b80821115617b705760008082016000617b539190617ac7565b6001820160006101000a81549060ff021916905550600201617b3a565b5090565b90565b6000617b838235619da9565b905092915050565b6000617b978251619da9565b905092915050565b600082601f8301121515617bb257600080fd5b8135617bc5617bc082619b00565b619ad3565b91508181835260208401935060208101905083856020840282011115617bea57600080fd5b60005b83811015617c1a5781617c008882617b77565b845260208401935060208301925050600181019050617bed565b5050505092915050565b600082601f8301121515617c3757600080fd5b6004617c4a617c4582619b28565b619ad3565b91508183856020840282011115617c6057600080fd5b60005b83811015617c905781617c768882617f1a565b845260208401935060208301925050600181019050617c63565b5050505092915050565b600082601f8301121515617cad57600080fd5b8135617cc0617cbb82619b4a565b619ad3565b91508181835260208401935060208101905083856020840282011115617ce557600080fd5b60005b83811015617d155781617cfb8882617f84565b845260208401935060208301925050600181019050617ce8565b5050505092915050565b600082601f8301121515617d3257600080fd5b8135617d45617d4082619b72565b619ad3565b9150818183526020840193506020810190508360005b83811015617d8b5781358601617d718882617f98565b845260208401935060208301925050600181019050617d5b565b5050505092915050565b600082601f8301121515617da857600080fd5b8151617dbb617db682619b72565b619ad3565b9150818183526020840193506020810190508360005b83811015617e015781518601617de78882617fee565b845260208401935060208301925050600181019050617dd1565b5050505092915050565b600082601f8301121515617e1e57600080fd5b6002617e31617e2c82619b9a565b619ad3565b91508183856020840282011115617e4757600080fd5b60005b83811015617e775781617e5d8882618058565b845260208401935060208301925050600181019050617e4a565b5050505092915050565b600082601f8301121515617e9457600080fd5b8135617ea7617ea282619bbc565b619ad3565b91508181835260208401935060208101905083856020840282011115617ecc57600080fd5b60005b83811015617efc5781617ee28882618044565b845260208401935060208301925050600181019050617ecf565b5050505092915050565b6000617f128251619dc9565b905092915050565b6000617f268235619dd5565b905092915050565b600082601f8301121515617f4157600080fd5b8135617f54617f4f82619be4565b619ad3565b91508082526020830160208301858383011115617f7057600080fd5b617f7b838284619e17565b50505092915050565b6000617f908235619ddf565b905092915050565b600082601f8301121515617fab57600080fd5b8135617fbe617fb982619c10565b619ad3565b91508082526020830160208301858383011115617fda57600080fd5b617fe5838284619e17565b50505092915050565b600082601f830112151561800157600080fd5b815161801461800f82619c10565b619ad3565b9150808252602083016020830185838301111561803057600080fd5b61803b838284619e26565b50505092915050565b60006180508235619de9565b905092915050565b60006180648251619de9565b905092915050565b60006020828403121561807e57600080fd5b600061808c84828501617b8b565b91505092915050565b60008060a083850312156180a857600080fd5b60006180b685828601617b77565b92505060206180c785828601617c24565b9150509250929050565b600080604083850312156180e457600080fd5b60006180f285828601617b8b565b925050602061810385828601617f06565b9150509250929050565b60006020828403121561811f57600080fd5b600082013567ffffffffffffffff81111561813957600080fd5b61814584828501617b9f565b91505092915050565b6000806000806000610100868803121561816757600080fd5b600086013567ffffffffffffffff81111561818157600080fd5b61818d88828901617b9f565b955050602061819e88828901618044565b945050604086013567ffffffffffffffff8111156181bb57600080fd5b6181c788828901617c9a565b935050606086013567ffffffffffffffff8111156181e457600080fd5b6181f088828901617d1f565b925050608061820188828901617c24565b9150509295509295909350565b60006080828403121561822057600080fd5b600061822e84828501617c24565b91505092915050565b60006020828403121561824957600080fd5b600082015167ffffffffffffffff81111561826357600080fd5b61826f84828501617d95565b91505092915050565b60008060008060e0858703121561828e57600080fd5b600085013567ffffffffffffffff8111156182a857600080fd5b6182b487828801617e81565b945050602085013567ffffffffffffffff8111156182d157600080fd5b6182dd87828801617b9f565b935050604085013567ffffffffffffffff8111156182fa57600080fd5b61830687828801617c9a565b925050606061831787828801617c24565b91505092959194509250565b60006020828403121561833557600080fd5b600061834384828501617f06565b91505092915050565b6000806060838503121561835f57600080fd5b600061836d85828601617f06565b925050602061837e85828601617e0b565b9150509250929050565b60006020828403121561839a57600080fd5b600082013567ffffffffffffffff8111156183b457600080fd5b6183c084828501617f2e565b91505092915050565b60008060a083850312156183dc57600080fd5b600083013567ffffffffffffffff8111156183f657600080fd5b61840285828601617f2e565b925050602061841385828601617c24565b9150509250929050565b6000806040838503121561843057600080fd5b600083013567ffffffffffffffff81111561844a57600080fd5b61845685828601617f2e565b925050602083013567ffffffffffffffff81111561847357600080fd5b61847f85828601617f2e565b9150509250929050565b600080600060c0848603121561849e57600080fd5b600084013567ffffffffffffffff8111156184b857600080fd5b6184c486828701617f2e565b935050602084013567ffffffffffffffff8111156184e157600080fd5b6184ed86828701617f2e565b92505060406184fe86828701617c24565b9150509250925092565b60006020828403121561851a57600080fd5b600061852884828501618058565b91505092915050565b61853a81619d52565b82525050565b600061854b82619c96565b80845260208401935061855d83619c3c565b60005b8281101561858f57618573868351618531565b61857c82619d04565b9150602086019550600181019050618560565b50849250505092915050565b6185a481619ca1565b6185ad82619c49565b60005b828110156185df576185c3858351618764565b6185cc82619d11565b91506020850194506001810190506185b0565b5050505050565b60006185f182619cac565b80845260208401935061860383619c53565b60005b8281101561863557618619868351618883565b618622","82619d1e565b9150602086019550600181019050618606565b50849250505092915050565b600061864c82619cb7565b8084526020840193508360208202850161866585619c60565b60005b8481101561869e5783830388526186808383516188c8565b925061868b82619d2b565b9150602088019750600181019050618668565b508196508694505050505092915050565b6186b881619cc2565b6186c182619c6d565b60005b828110156186f3576186d785835161907a565b6186e082619d38565b91506020850194506001810190506186c4565b5050505050565b600061870582619ccd565b80845260208401935061871783619c77565b60005b828110156187495761872d86835161907a565b61873682619d45565b915060208601955060018101905061871a565b50849250505092915050565b61875e81619d72565b82525050565b61876d81619d7e565b82525050565b600061877e82619ce3565b808452618792816020860160208601619e26565b61879b81619e59565b602085010191505092915050565b60006187b482619cd8565b8084526187c8816020860160208601619e26565b6187d181619e59565b602085010191505092915050565b6000815460018116600081146187fc576001811461881c5761885d565b607f600283041680865260ff19831660208701526040860193505061885d565b6002820480865260208601955061883285619c84565b60005b8281101561885457815481890152600182019150602081019050618835565b80880195505050505b505092915050565b61886e81619df3565b82525050565b61887d81619e05565b82525050565b61888c81619d88565b82525050565b600061889d82619cf9565b8084526188b1816020860160208601619e26565b6188ba81619e59565b602085010191505092915050565b60006188d382619cee565b8084526188e7816020860160208601619e26565b6188f081619e59565b602085010191505092915050565b6000601982527f746865206163636f756e7420686173206265656e206f70656e000000000000006020830152604082019050919050565b6000602382527f417574683a6f6e6c79206163636f756e7420737461747573206973206e6f726d60208301527f616c2e00000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000601482527f746f206163636f756e74206e6f742065786973740000000000000000000000006020830152604082019050919050565b6000600a82527f67657442616c616e6365000000000000000000000000000000000000000000006020830152604082019050919050565b6000600e82527f61646420466f7262696464656e210000000000000000000000000000000000006020830152604082019050919050565b6000601782527f616d6f756e743c3d30206973206e6f74207665726966790000000000000000006020830152604082019050919050565b6000601482527f466f7262696464656e20676574486f6c646572730000000000000000000000006020830152604082019050919050565b6000600f82527f676574546f74616c42616c616e636500000000000000000000000000000000006020830152604082019050919050565b6000600a82527f676574486f6c64657273000000000000000000000000000000000000000000006020830152604082019050919050565b6000601582527f466f7262696464656e206f70656e4163636f756e7400000000000000000000006020830152604082019050919050565b6000601482527f466f7262696464656e2067657442616c616e63650000000000000000000000006020830152604082019050919050565b6000602c82527f466f7262696464656e207175657279426f6f6b206265636175736520796f752060208301527f6172656e2774206f776e657200000000000000000000000000000000000000006040830152606082019050919050565b6000601b82527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006020830152604082019050919050565b6000604182527f6c696d6974206e6f74207665726966792c6c696d69742073697a652073686f7560208301527f6c6420657175616c73203220616e64206c696d69745b305d3c6c696d69745b3160408301527f5d000000000000000000000000000000000000000000000000000000000000006060830152608082019050919050565b6000600e82527f67657420466f7262696464656e210000000000000000000000000000000000006020830152604082019050919050565b6000600782527f616464426f6f6b000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000601182527f466f7262696464656e20616464426f6f6b0000000000000000000000000000006020830152604082019050919050565b6000602682527f546865206c656e677468206f662064657363206279746573206973207769746860208301527f696e2032353500000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000602182527f6f70657261746f72206f72206163636f756e74206973206e6f74206e6f726d6160208301527f6c000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000602982527f546865206c656e677468206f66207375626a656374206279746573206973207760208301527f697468696e2032353500000000000000000000000000000000000000000000006040830152606082019050919050565b6000601e82527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006020830152604082019050919050565b6000600e82527f73657420466f7262696464656e210000000000000000000000000000000000006020830152604082019050919050565b6000601d82527f746865206163636f756e7420686173206e6f74206265656e206f70656e0000006020830152604082019050919050565b6000601682527f66726f6d206163636f756e74206e6f74206578697374000000000000000000006020830152604082019050919050565b6000601382527f466f7262696464656e207175657279426f6f6b000000000000000000000000006020830152604082019050919050565b6000601182527f696e7365727420466f7262696464656e210000000000000000000000000000006020830152604082019050919050565b6000600b82527f6f70656e4163636f756e740000000000000000000000000000000000000000006020830152604082019050919050565b6000601182527f72656d6f766520466f7262696464656e210000000000000000000000000000006020830152604082019050919050565b6000600982527f7175657279426f6f6b00000000000000000000000000000000000000000000006020830152604082019050919050565b6000601f82527f676574546f74616c42616c616e636520676574546f74616c42616c616e6365006020830152604082019050919050565b61908381619d92565b82525050565b61909281619d9c565b82525050565b60006020820190506190ad6000830184618531565b92915050565b60006080820190506190c86000830187618531565b6190d56020830186618531565b6190e26040830185618531565b81810360608301526190f48184618773565b905095945050505050565b6000610100820190506191156000830188618531565b6191226020830187618531565b818103604083015261913481866187a9565b905081810360608301526191488185618773565b9050619157608083018461859b565b9695505050505050565b600060a0820190506191766000830188618531565b6191836020830187618531565b818103604083015261919581866187a9565b905081810360608301526191a98185618773565b905081810360808301526191bd81846187df565b90509695505050505050565b6000610100820190506191df6000830187618531565b6191ec6020830186618531565b81810360408301526191fd816189c9565b905081810360608301526192118185618773565b9050619220608083018461859b565b95945050505050565b600060608201905061923e6000830186618531565b61924b6020830185618531565b619258604083018461907a565b949350505050565b6000610100820190506192766000830188618531565b6192836020830187618865565b81810360408301526192958186618773565b905081810360608301526192a98185618773565b90506192b8608083018461859b565b9695505050505050565b6000610100820190506192d86000830188618531565b6192e56020830187618874565b81810360408301526192f781866187a9565b9050818103606083015261930b8185618773565b905061931a608083018461859b565b9695505050505050565b60006101008201905061933a6000830187618531565b6193476020830186618874565b818103604083015261935881618aa5565b9050818103606083015261936c8185618773565b905061937b608083018461859b565b95945050505050565b60006101008201905061939a6000830187618531565b6193a76020830186618874565b81810360408301526193b881618adc565b905081810360608301526193cc8185618773565b90506193db608083018461859b565b95945050505050565b6000610100820190506193fa6000830187618531565b6194076020830186618874565b818103604083015261941881618ccf565b9050818103606083015261942c8185618773565b905061943b608083018461859b565b95945050505050565b60006101008201905061945a6000830187618531565b6194676020830186618874565b818103604083015261947881618f9e565b9050818103606083015261948c8185618773565b905061949b608083018461859b565b95945050505050565b6000610100820190506194ba6000830187618531565b6194c76020830186618874565b81810360408301526194d88161900c565b905081810360608301526194ec8185618773565b90506194fb608083018461859b565b95945050505050565b60006040820190506195196000830185618531565b619526602083018461907a565b9392505050565b600060208201905081810360008301526195478184618540565b905092915050565b600060808201905081810360008301526195698187618540565b9050619578602083018661907a565b818103604083015261958a8185618641565b9050818103606083015261959e81846185e6565b905095945050505050565b600060208201905081810360008301526195c38184618641565b905092915050565b600060608201905081810360008301526195e581866186fa565b905081810360208301526195f98185618540565b9050818103604083015261960d81846185e6565b9050949350505050565b6000602082","01905061962c6000830184618755565b92915050565b60006040820190506196476000830185618755565b81810360208301526196598184618540565b90509392505050565b60006060820190506196776000830185618755565b61968460208301846186af565b9392505050565b600060208201905081810360008301526196a581846187a9565b905092915050565b600060208201905081810360008301526196c78184618773565b905092915050565b60006060820190506196e46000830186618874565b6196f16020830185618531565b6196fe6040830184618755565b949350505050565b6000602082019050818103600083015261972081846188c8565b905092915050565b600060208201905081810360008301526197428184618892565b905092915050565b60006020820190508181036000830152619763816188fe565b9050919050565b6000602082019050818103600083015261978381618935565b9050919050565b600060208201905081810360008301526197a381618992565b9050919050565b600060208201905081810360008301526197c381618a00565b9050919050565b600060208201905081810360008301526197e381618a37565b9050919050565b6000602082019050818103600083015261980381618a6e565b9050919050565b6000602082019050818103600083015261982381618b13565b9050919050565b6000602082019050818103600083015261984381618b4a565b9050919050565b6000602082019050818103600083015261986381618b81565b9050919050565b6000602082019050818103600083015261988381618bde565b9050919050565b600060208201905081810360008301526198a381618c15565b9050919050565b600060208201905081810360008301526198c381618c98565b9050919050565b600060208201905081810360008301526198e381618d06565b9050919050565b6000602082019050818103600083015261990381618d3d565b9050919050565b6000602082019050818103600083015261992381618d9a565b9050919050565b6000602082019050818103600083015261994381618df7565b9050919050565b6000602082019050818103600083015261996381618e54565b9050919050565b6000602082019050818103600083015261998381618e8b565b9050919050565b600060208201905081810360008301526199a381618ec2565b9050919050565b600060208201905081810360008301526199c381618ef9565b9050919050565b600060208201905081810360008301526199e381618f30565b9050919050565b60006020820190508181036000830152619a0381618f67565b9050919050565b60006020820190508181036000830152619a2381618fd5565b9050919050565b60006020820190508181036000830152619a4381619043565b9050919050565b6000602082019050619a5f600083018461907a565b92915050565b600060a082019050619a7a600083018861907a565b619a87602083018761907a565b619a946040830186618531565b619aa16060830185618531565b619aae608083018461907a565b9695505050505050565b6000602082019050619acd6000830184619089565b92915050565b6000604051905081810181811067ffffffffffffffff82111715619af657600080fd5b8060405250919050565b600067ffffffffffffffff821115619b1757600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115619b3f57600080fd5b602082029050919050565b600067ffffffffffffffff821115619b6157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115619b8957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115619bb157600080fd5b602082029050919050565b600067ffffffffffffffff821115619bd357600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115619bfb57600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115619c2757600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b60008160005260206000209050919050565b600081519050919050565b600060049050919050565b600081519050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b6000819050919050565b6000819050919050565b600060ff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b6000819050919050565b6000819050919050565b6000619dfe82619d52565b9050919050565b6000619e1082619d52565b9050919050565b82818337600083830152505050565b60005b83811015619e44578082015181840152602081019050619e29565b83811115619e53576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a7230582073e026054eb6a8333ebb6d6e8aa9c0de6629d64cac18059f0cefac31f88ae3656c6578706572696d656e74616cf5003760806040523480156200001157600080fd5b506040516200593638038062005936833981018060405262000037919081019062000354565b826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260019080600181540180825580915050906001820390600052602060002001600090919290919091505550611001600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a9080519060200190620000ff9291906200021b565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c92a7801600a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016200017a91906200055d565b602060405180830381600087803b1580156200019557600080fd5b505af1158015620001aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620001d09190810190620003c3565b5080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000678565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200025e57805160ff19168380011785556200028f565b828001600101855582156200028f579182015b828111156200028e57825182559160200191906001019062000271565b5b5090506200029e9190620002a2565b5090565b620002c791905b80821115620002c3576000816000905550600101620002a9565b5090565b90565b6000620002d8825162000618565b905092915050565b6000620002ee825162000638565b905092915050565b600082601f83011215156200030a57600080fd5b8151620003216200031b82620005d9565b620005ab565b915080825260208301602083018583830111156200033e57600080fd5b6200034b83828462000642565b50505092915050565b6000806000606084860312156200036a57600080fd5b60006200037a86828701620002ca565b935050602084015167ffffffffffffffff8111156200039857600080fd5b620003a686828701620002f6565b9250506040620003b986828701620002ca565b9150509250925092565b600060208284031215620003d657600080fd5b6000620003e684828501620002e0565b91505092915050565b6000815460018116600081146200040f5760018114620004305762000475565b607f600283041680865260ff19831660208701526040860193505062000475565b60028204808652602086019550620004488562000606565b60005b828110156200046c578154818901526001820191506020810190506200044b565b80880195505050505b505092915050565b6000600782527f626f6f6b5f6e6f000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000606482527f7465726d5f6e6f2c7365712c66726f6d2c746f2c616d6f756e742c617373657460208301527f2c6f70657261746f722c646573632c7472616e73616374696f6e5f747970652c60408301527f6f7065726174696f6e5f747970652c7375626a6563742c72656c617465645f6160608301527f7373657400000000000000000000000000000000000000000000000000000000608083015260a082019050919050565b60006060820190508181036000830152620005798184620003ef565b905081810360208301526200058e816200047d565b90508181036040830152620005a381620004b4565b905092915050565b6000604051905081810181811067ffffffffffffffff82111715620005cf57600080fd5b8060405250919050565b600067ffffffffffffffff821115620005f157600080fd5b601f19601f8301169050602081019050919050565b60008160005260206000209050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200066257808201518184015260208101905062000645565b8381111562000672576000848401525b50505050565b6152ae80620006886000396000f300608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806311567c421461006757806318768d1e1461009257806345be589e146100d0578063b32cf81b146100fb575b600080fd5b34801561007357600080fd5b5061007c610138565b6040516100899190614945565b60405180910390f35b34801561009e57600080fd5b506100b960048036036100b4919081019061405e565b610140565b6040516100c7929190614982565b60405180910390f35b3480156100dc57600080fd5b506100e56105d1565b6040516100f29190614f3f","565b60405180910390f35b34801561010757600080fd5b50610122600480360361011d9190810190614109565b61062e565b60405161012f9190614960565b60405180910390f35b600030905090565b600061014a613c9a565b60006060600080600061015b613c9a565b60048c511015801561016e575060028951145b15156101af576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016101a690614d6b565b60405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631bf727356040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801561023457600080fd5b505af1158015610248573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061027191908101906142d7565b80965081975050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd332ffe6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156102fe57600080fd5b505af1158015610312573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061033691908101906142ae565b935061034686858e8e8e8e610cef565b9250600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b65600a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016103c09190614a4f565b602060405180830381600087803b1580156103da57600080fd5b505af11580156103ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610412919081019061421b565b915060018273ffffffffffffffffffffffffffffffffffffffff16634c6f30c061045c600260016002805490500381548110151561044c57fe5b90600052602060002001546116b9565b866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610496929190614a1f565b602060405180830381600087803b1580156104b057600080fd5b505af11580156104c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506104e89190810190614244565b14151561052a576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161052190614bfe565b60405180910390fd5b61053586858e611810565b60408051908101604052808781526020018581525090507f370fc1741645a856379d1c2be6c9f567fa67f594a8b02fa03d83b70ebe8958dc86858e600281518110151561057e57fe5b906020019060200201518f600381518110151561059757fe5b906020019060200201518f6040516105b3959493929190614f5a565b60405180910390a16001819750975050505050505094509492505050565b600060026001600280549050019080600181540180825580915050906001820390600052602060002001600090919290919091505550600260016002805490500381548110151561061e57fe5b9060005260206000200154905090565b60606000606060006060600080606060008b51118061064e575060008a51115b151561068f576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161068690614d6b565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b65600a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016107079190614a4f565b602060405180830381600087803b15801561072157600080fd5b505af1158015610735573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610759919081019061421b565b96506107658b8b611dca565b80965081975050508673ffffffffffffffffffffffffffffffffffffffff1663c74f8caf6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156107d157600080fd5b505af11580156107e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061080991908101906141a0565b92506000915060008b51118015610839575060008b600081518110151561082c57fe5b9060200190602002015114155b156108e6578273ffffffffffffffffffffffffffffffffffffffff1663ae763db561087b8d600081518110151561086c57fe5b906020019060200201516116b9565b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016108b39190614d36565b600060405180830381600087803b1580156108cd57600080fd5b505af11580156108e1573d6000803e3d6000fd5b505050505b60018b51118015610910575060008b600181518110151561090357fe5b9060200190602002015114155b156109bd578273ffffffffffffffffffffffffffffffffffffffff1663ae763db56109528d600181518110151561094357fe5b906020019060200201516116b9565b6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161098a9190614b74565b600060405180830381600087803b1580156109a457600080fd5b505af11580156109b8573d6000803e3d6000fd5b505050505b60008a51118015610a135750600073ffffffffffffffffffffffffffffffffffffffff168a60008151811015156109f057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b15610ad6578273ffffffffffffffffffffffffffffffffffffffff1663ae763db5610a6b8c6000815181101515610a4657fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1661244e565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610aa39190614bc9565b600060405180830381600087803b158015610abd57600080fd5b505af1158015610ad1573d6000803e3d6000fd5b505050505b60018a51118015610b2c5750600073ffffffffffffffffffffffffffffffffffffffff168a6001815181101515610b0957fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b15610bef578273ffffffffffffffffffffffffffffffffffffffff1663ae763db5610b848c6001815181101515610b5f57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1661244e565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610bbc9190614eb5565b600060405180830381600087803b158015610bd657600080fd5b505af1158015610bea573d6000803e3d6000fd5b505050505b8273ffffffffffffffffffffffffffffffffffffffff1663324927378a6000815181101515610c1a57fe5b906020019060200201518b6001815181101515610c3357fe5b906020019060200201516040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610c769291906149c6565b600060405180830381600087803b158015610c9057600080fd5b505af1158015610ca4573d6000803e3d6000fd5b50505050610cb38686856125c2565b809350819250505060008151118015610ccc5750600082135b15610cde57610cdb81836128ca565b93505b839750505050505050509392505050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b65600a6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610d6c9190614a4f565b602060405180830381600087803b158015610d8657600080fd5b505af1158015610d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dbe919081019061421b565b91508173ffffffffffffffffffffffffffffffffffffffff16635887ab246040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b158015610e2457600080fd5b505af1158015610e38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e5c91908101906141f2565b90508073ffffffffffffffffffffffffffffffffffffffff16631a391cb4610ea46002600160028054905003815481101515610e9457fe5b90600052602060002001546116b9565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610edc9190614ce1565b600060405180830381600087803b158015610ef657600080fd5b505af1158015610f0a573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16631a391cb4610f338a6116b9565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610f6b9190614b74565b600060405180830381600087803b158015610f8557600080fd5b505af1158015610f99573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16631a391cb4610fc28b6116b9565b6040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610ffa9190614d36565b600060405180830381600087803b15801561101457600080fd5b505af1158015611028573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16631a391cb461107f89600281518110151561105a57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1661244e565b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016110b79190614bc9565b600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b505050508073ffffffffff","ffffffffffffffffffffffffffffff16631a391cb461113c89600381518110151561111757fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1661244e565b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016111749190614eb5565b600060405180830381600087803b15801561118e57600080fd5b505af11580156111a2573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663517c4dd98860018151811015156111d157fe5b906020019060200201516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016112139190614c93565b600060405180830381600087803b15801561122d57600080fd5b505af1158015611241573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16631a391cb461126a886116b9565b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016112a29190614c3e565b600060405180830381600087803b1580156112bc57600080fd5b505af11580156112d0573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663517c4dd98860008151811015156112ff57fe5b906020019060200201516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016113419190614b06565b600060405180830381600087803b15801561135b57600080fd5b505af115801561136f573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16631a391cb486600081518110151561139e57fe5b906020019060200201516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016113e09190614ab1565b600060405180830381600087803b1580156113fa57600080fd5b505af115801561140e573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663def4269885600081518110151561143d57fe5b906020019060200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161147f9190614dab565b600060405180830381600087803b15801561149957600080fd5b505af11580156114ad573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff1663def426988560018151811015156114dc57fe5b906020019060200201516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161151e9190614df9565b600060405180830381600087803b15801561153857600080fd5b505af115801561154c573d6000803e3d6000fd5b505050506001855111156115fa578073ffffffffffffffffffffffffffffffffffffffff16631a391cb486600181518110151561158557fe5b906020019060200201516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016115c79190614f0a565b600060405180830381600087803b1580156115e157600080fd5b505af11580156115f5573d6000803e3d6000fd5b505050505b8073ffffffffffffffffffffffffffffffffffffffff1663517c4dd9600589511061163d5788600481518110151561162e57fe5b90602001906020020151611640565b60005b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016116789190614e47565b600060405180830381600087803b15801561169257600080fd5b505af11580156116a6573d6000803e3d6000fd5b5050505080925050509695505050505050565b60606000806060600080861415611707576040805190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509450611807565b8593505b600084141515611731578280600101935050600a8481151561172957fe5b04935061170b565b826040519080825280601f01601f1916602001820160405280156117645781602001602082028038833980820191505090505b5091506001830390505b60008614151561180357600a8681151561178457fe5b066030017f0100000000000000000000000000000000000000000000000000000000000000028282806001900393508151811015156117bf57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a868115156117fb57fe5b04955061176e565b8194505b50505050919050565b600760008481526020019081526020016000206000600260016002805490500381548110151561183c57fe5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff1615156119265760036000848152602001908152602001600020600260016002805490500381548110151561189357fe5b90600052602060002001549080600181540180825580915050906001820390600052602060002001600090919290919091505550600160076000858152602001908152602001600020600060026001600280549050038154811015156118f557fe5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600260016002805490500381548110151561193d57fe5b906000526020600020015460046000848152602001908152602001600020819055506008600082600281518110151561197257fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060026001600280549050038154811015156119cf57fe5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff16158015611a485750806002815181101515611a0d57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614155b15611b925760056000826002815181101515611a6057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002600160028054905003815481101515611abb57fe5b90600052602060002001549080600181540180825580915050906001820390600052602060002001600090919290919091505550600160086000836002815181101515611b0457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006002600160028054905003815481101515611b6157fe5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60096000826003815181101515611ba557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006002600160028054905003815481101515611c0257fe5b9060005260206000200154815260200190815260200160002060009054906101000a900460ff16158015611c7b5750806003815181101515611c4057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614155b15611dc55760066000826003815181101515611c9357fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002600160028054905003815481101515611cee57fe5b90600052602060002001549080600181540180825580915050906001820390600052602060002001600090919290919091505550600160096000836003815181101515611d3757fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006002600160028054905003815481101515611d9457fe5b9060005260206000200154815260200190815260200160002060006101000a81548160ff0219169083151502179055505b505050565b6060600060606000806000806000600280549050604051908082528060200260200182016040528015611e0c5781602001602082028038833980820191505090505b50955060018a51118015611e39575060008a6001815181101515611e2c57fe5b9060200190602002015114155b15611ec7576000600460008c6001815181101515611e5357fe5b90602001906020020151815260200190815260200160002054141515611ec6576001866001600460008e6001815181101515611e8b57fe5b9060200190602002015181526020019081526020016000205403815181101515611eb157fe5b90602001906020020190151590811515815250505b5b60008a51118015611ef1575060008a6000815181101515611ee457fe5b9060200190602002015114155b1561200c57600094505b600360008b6000815181101515611f0e57fe5b9060200190602002015181526020019081526020016000208054905085101561200b57856001600360008d6000815181101515611f4757fe5b90602001906020020151815260200190815260200160002087815481101515611f6c57fe5b906000526020600020015403815181101515611f8457fe5b906020019060200201511515611ffe576001866001600360008e6000815181101515611fac57fe5b90602001906020020151815260200190815260200160002088815481101515611fd157fe5b906000526020600020015403815181101515611fe957fe5b90602001906020020190151590811515815250505b8480600101955050611efb565b5b600089511180156120625750600073ffffffffffffffffffffffffffffffffffffffff1689600081518110151561203f57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b1561220157600093505b600560008a600081518110151561207f57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905084101561220057856001600560008c60008151811015156120e457fe5b9060200190602002015173ff","ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208681548110151561213557fe5b90600052602060002001540381518110151561214d57fe5b9060200190602002015115156121f3576001866001600560008d600081518110151561217557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020878154811015156121c657fe5b9060005260206000200154038151811015156121de57fe5b90602001906020020190151590811515815250505b838060010194505061206c565b5b600189511180156122575750600073ffffffffffffffffffffffffffffffffffffffff1689600181518110151561223457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1614155b156123f657600092505b600660008a600181518110151561227457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508310156123f557856001600660008c60018151811015156122d957fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208581548110151561232a57fe5b90600052602060002001540381518110151561234257fe5b9060200190602002015115156123e8576001866001600660008d600181518110151561236a57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020868154811015156123bb57fe5b9060005260206000200154038151811015156123d357fe5b90602001906020020190151590811515815250505b8280600101935050612261565b5b60009150600090505b855181101561243b57858181518110151561241657fe5b906020019060200201511561242e5781806001019250505b80806001019150506123ff565b8582975097505050505050509250929050565b60606000806000606060008673ffffffffffffffffffffffffffffffffffffffff16945060008514156124b8576040805190810160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525095506125b8565b8493505b6000841415156124e2578280600101935050600a848115156124da57fe5b0493506124bc565b826040519080825280601f01601f1916602001820160405280156125155781602001602082028038833980820191505090505b5091506001830390505b6000851415156125b457600a8581151561253557fe5b066030017f01000000000000000000000000000000000000000000000000000000000000000282828060019003935081518110151561257057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a858115156125ac57fe5b04945061251f565b8195505b5050505050919050565b6060600080600060606000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166359a48b65600a6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016126489190614a4f565b602060405180830381600087803b15801561266257600080fd5b505af1158015612676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061269a919081019061421b565b955060009450896040519080825280602002602001820160405280156126cf5781602001602082028038833980820191505090505b50935060009250600091505b8a518210156128b6578a828151811015156126f257fe5b90602001906020020151156128a9578573ffffffffffffffffffffffffffffffffffffffff1663d8ac5957612729600185016116b9565b8b6040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016127639291906149ef565b602060405180830381600087803b15801561277d57600080fd5b505af1158015612791573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127b591908101906141c9565b90508073ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561281b57600080fd5b505af115801561282f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128539190810190614244565b8501945080848480600101955081518110151561286c57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b81806001019250506126db565b838597509750505050505050935093915050565b60608060008060008060006060600c890260405190808252806020026020018201604052801561290e57816020015b60608152602001906001900390816128f95790505b509650600095505b895186101561353457898681518110151561292d57fe5b90602001906020020151945060009350600092505b8473ffffffffffffffffffffffffffffffffffffffff1663d3e9af5a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1580156129a657600080fd5b505af11580156129ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129de9190810190614244565b831215613527578473ffffffffffffffffffffffffffffffffffffffff16633dd2b614846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612a3a91906149ab565b602060405180830381600087803b158015612a5457600080fd5b505af1158015612a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a8c91908101906141f2565b915060009350612c938273ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612ae890614ba9565b600060405180830381600087803b158015612b0257600080fd5b505af1158015612b16573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612b3f919081019061426d565b8373ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612b9290614e95565b600060405180830381600087803b158015612bac57600080fd5b505af1158015612bc0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612be9919081019061426d565b8473ffffffffffffffffffffffffffffffffffffffff166307afbf3a6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612c3c90614ae6565b602060405180830381600087803b158015612c5657600080fd5b505af1158015612c6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612c8e9190810190614035565b613544565b905060038151141515612cdb576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401612cd290614a71565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612d2e90614d16565b600060405180830381600087803b158015612d4857600080fd5b505af1158015612d5c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612d85919081019061426d565b878585600c0201815181101515612d9857fe5b906020019060200201819052508173ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612df890614b54565b600060405180830381600087803b158015612e1257600080fd5b505af1158015612e26573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612e4f919081019061426d565b878560010195508585600c0201815181101515612e6857fe5b90602001906020020181905250806000815181101515612e8457fe5b90602001906020020151878560010195508585600c0201815181101515612ea757fe5b90602001906020020181905250806001815181101515612ec357fe5b90602001906020020151878560010195508585600c0201815181101515612ee657fe5b906020019060200201819052508173ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612f4690614c1e565b600060405180830381600087803b158015612f6057600080fd5b505af1158015612f74573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250612f9d919081019061426d565b878560010195508585600c0201815181101515612fb657fe5b906020019060200201819052508173ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161301690614a91565b600060405180830381600087803b15801561303057600080fd5b505af1158015613044573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061306d919081019061426d565b878560010195508585600c020181518110151561308657fe5b906020019060200201819052506131568273ffffffffffffffffffffffffffffffffffffffff166307afbf3a6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016130e990614c73565b60206040518083","0381600087803b15801561310357600080fd5b505af1158015613117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061313b9190810190614035565b73ffffffffffffffffffffffffffffffffffffffff1661244e565b878560010195508585600c020181518110151561316f57fe5b9060200190602002018190525080600281518110151561318b57fe5b90602001906020020151878560010195508585600c02018151811015156131ae57fe5b906020019060200201819052506132688273ffffffffffffffffffffffffffffffffffffffff16634900862e6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161321190614d8b565b602060405180830381600087803b15801561322b57600080fd5b505af115801561323f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506132639190810190614244565b6116b9565b878560010195508585600c020181518110151561328157fe5b9060200190602002018190525061333b8273ffffffffffffffffffffffffffffffffffffffff16634900862e6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016132e490614dd9565b602060405180830381600087803b1580156132fe57600080fd5b505af1158015613312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133369190810190614244565b6116b9565b878560010195508585600c020181518110151561335457fe5b906020019060200201819052506134248273ffffffffffffffffffffffffffffffffffffffff166307afbf3a6040518163ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016133b790614e27565b602060405180830381600087803b1580156133d157600080fd5b505af11580156133e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506134099190810190614035565b73ffffffffffffffffffffffffffffffffffffffff1661244e565b878560010195508585600c020181518110151561343d57fe5b906020019060200201819052508173ffffffffffffffffffffffffffffffffffffffff16639bca41e86040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161349d90614eea565b600060405180830381600087803b1580156134b757600080fd5b505af11580156134cb573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506134f4919081019061426d565b878560010195508585600c020181518110151561350d57fe5b906020019060200201819052508280600101935050612942565b8580600101965050612916565b8697505050505050505092915050565b606080600080600360405190808252806020026020018201604052801561357f57816020015b606081526020019060019003908161356a5790505b50925061358b87613ac9565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614151561374557600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4dcade661360789613ac9565b6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161363f9190614945565b602060405180830381600087803b15801561365957600080fd5b505af115801561366d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506136919190810190614035565b90508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614151515613705576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016136fc90614cc1565b60405180910390fd5b6137248173ffffffffffffffffffffffffffffffffffffffff1661244e565b83600081518110151561373357fe5b90602001906020020181905250613763565b8683600081518110151561375557fe5b906020019060200201819052505b61376c86613ac9565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614151561392657600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4dcade66137e888613ac9565b6040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016138209190614945565b602060405180830381600087803b15801561383a57600080fd5b505af115801561384e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506138729190810190614035565b90508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff16141515156138e6576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016138dd90614b34565b60405180910390fd5b6139058173ffffffffffffffffffffffffffffffffffffffff1661244e565b83600181518110151561391457fe5b90602001906020020181905250613944565b8583600181518110151561393657fe5b906020019060200201819052505b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4dcade6866040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016139bb9190614945565b602060405180830381600087803b1580156139d557600080fd5b505af11580156139e9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613a0d9190810190614035565b90508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff1614151515613a81576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401613a7890614e75565b60405180910390fd5b613aa08173ffffffffffffffffffffffffffffffffffffffff1661244e565b836002815181101515613aaf57fe5b906020019060200201819052508293505050509392505050565b6000606060008084925060009150600090505b8251811015613c8f5760308382815181101515613af557fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900460ff1610158015613bf3575060398382815181101515613b7f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f0100000000000000000000000000000000000000000000000000000000000000900460ff1611155b15613c825760308382815181101515613c0857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f010000000000000000000000000000000000000000000000000000000000000090040360ff16600a83020191505b8080600101915050613adc565b819350505050919050565b6040805190810160405280600290602082028038833980820191505090505090565b6000613cc88235615181565b905092915050565b6000613cdc8251615181565b905092915050565b600082601f8301121515613cf757600080fd5b8135613d0a613d0582614fda565b614fad565b91508181835260208401935060208101905083856020840282011115613d2f57600080fd5b60005b83811015613d5f5781613d458882613cbc565b845260208401935060208301925050600181019050613d32565b5050505092915050565b600082601f8301121515613d7c57600080fd5b8135613d8f613d8a82615002565b614fad565b91508181835260208401935060208101905083856020840282011115613db457600080fd5b60005b83811015613de45781613dca8882613f39565b845260208401935060208301925050600181019050613db7565b5050505092915050565b600082601f8301121515613e0157600080fd5b8135613e14613e0f8261502a565b614fad565b9150818183526020840193506020810190508360005b83811015613e5a5781358601613e408882613f61565b845260208401935060208301925050600181019050613e2a565b5050505092915050565b600082601f8301121515613e7757600080fd5b8135613e8a613e8582615052565b614fad565b91508181835260208401935060208101905083856020840282011115613eaf57600080fd5b60005b83811015613edf5781613ec5888261400d565b845260208401935060208301925050600181019050613eb2565b5050505092915050565b6000613ef582516151a1565b905092915050565b6000613f0982516151b3565b905092915050565b6000613f1d82516151c5565b905092915050565b6000613f3182516151d7565b905092915050565b6000613f4582356151e9565b905092915050565b6000613f5982516151e9565b905092915050565b600082601f8301121515613f7457600080fd5b8135613f87613f828261507a565b614fad565b91508082526020830160208301858383011115613fa357600080fd5b613fae838284615221565b50505092915050565b600082601f8301121515613fca57600080fd5b8151613fdd613fd8826150a6565b614fad565b91508082526020830160208301858383011115613ff957600080fd5b614004838284615230565b50505092915050565b600061401982356151f3565b905092915050565b600061402d82516151f3565b905092915050565b60006020828403121561404757600080fd5b600061405584828501613cd0565b91505092915050565b6000806000806080858703121561407457600080fd5b600085013567ffffffffffffffff81111561408e57600080fd5b61409a87828801613ce4565b94505060206140ab8782880161400d565b935050604085013567ffffffffffffffff8111156140c857600080fd5b6140d487828801613dee565b925050606085013567ffffffffffffffff8111156140f157600080fd","5b6140fd87828801613d69565b91505092959194509250565b60008060006060848603121561411e57600080fd5b600084013567ffffffffffffffff81111561413857600080fd5b61414486828701613e64565b935050602084013567ffffffffffffffff81111561416157600080fd5b61416d86828701613ce4565b925050604084013567ffffffffffffffff81111561418a57600080fd5b61419686828701613d69565b9150509250925092565b6000602082840312156141b257600080fd5b60006141c084828501613ee9565b91505092915050565b6000602082840312156141db57600080fd5b60006141e984828501613efd565b91505092915050565b60006020828403121561420457600080fd5b600061421284828501613f11565b91505092915050565b60006020828403121561422d57600080fd5b600061423b84828501613f25565b91505092915050565b60006020828403121561425657600080fd5b600061426484828501613f4d565b91505092915050565b60006020828403121561427f57600080fd5b600082015167ffffffffffffffff81111561429957600080fd5b6142a584828501613fb7565b91505092915050565b6000602082840312156142c057600080fd5b60006142ce84828501614021565b91505092915050565b600080604083850312156142ea57600080fd5b60006142f885828601614021565b925050602083015167ffffffffffffffff81111561431557600080fd5b61432185828601613fb7565b9150509250929050565b61433481615141565b82525050565b6000614345826150fb565b8084526020840193508360208202850161435e856150d2565b60005b84811015614397578383038852614379838351614465565b925061438482615127565b9150602088019750600181019050614361565b508196508694505050505092915050565b6143b181615106565b6143ba826150df565b60005b828110156143ec576143d0858351614936565b6143d982615134565b91506020850194506001810190506143bd565b5050505050565b6143fc81615161565b82525050565b61440b816151fd565b82525050565b61441a8161520f565b82525050565b6144298161516d565b82525050565b600061443a8261511c565b80845261444e816020860160208601615230565b61445781615263565b602085010191505092915050565b600061447082615111565b808452614484816020860160208601615230565b61448d81615263565b602085010191505092915050565b6000815460018116600081146144b857600181146144d857614519565b607f600283041680865260ff198316602087015260408601935050614519565b600282048086526020860195506144ee856150e9565b60005b82811015614510578154818901526001820191506020810190506144f1565b80880195505050505b505092915050565b6000601282527f6163636f756e74206e6f742076657269667900000000000000000000000000006020830152604082019050919050565b6000600482527f64657363000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600882527f6f70657261746f720000000000000000000000000000000000000000000000006020830152604082019050919050565b6000601482527f746f206163636f756e74206e6f7420666f756e640000000000000000000000006020830152604082019050919050565b6000600382527f73657100000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600482527f66726f6d000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000601182527f777269746520626f6f6b206661696c65640000000000000000000000000000006020830152604082019050919050565b6000600682527f616d6f756e7400000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600582527f61737365740000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000601682527f66726f6d206163636f756e74206e6f7420666f756e64000000000000000000006020830152604082019050919050565b6000600782527f626f6f6b5f6e6f000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600782527f7465726d5f6e6f000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000601882527f506172616d73206973206e6f7420636f6d706c69616e636500000000000000006020830152604082019050919050565b6000601082527f7472616e73616374696f6e5f74797065000000000000000000000000000000006020830152604082019050919050565b6000600e82527f6f7065726174696f6e5f747970650000000000000000000000000000000000006020830152604082019050919050565b6000600d82527f72656c617465645f6173736574000000000000000000000000000000000000006020830152604082019050919050565b6000601a82527f6f70657261746f72206163636f756e74206e6f7420666f756e640000000000006020830152604082019050919050565b6000600282527f746f0000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000600782527f7375626a656374000000000000000000000000000000000000000000000000006020830152604082019050919050565b61493f81615177565b82525050565b600060208201905061495a600083018461432b565b92915050565b6000602082019050818103600083015261497a818461433a565b905092915050565b600060608201905061499760008301856143f3565b6149a460208301846143a8565b9392505050565b60006020820190506149c06000830184614420565b92915050565b60006040820190506149db6000830185614420565b6149e86020830184614420565b9392505050565b60006040820190508181036000830152614a09818561442f565b9050614a186020830184614402565b9392505050565b60006040820190508181036000830152614a39818561442f565b9050614a486020830184614411565b9392505050565b60006020820190508181036000830152614a69818461449b565b905092915050565b60006020820190508181036000830152614a8a81614521565b9050919050565b60006020820190508181036000830152614aaa81614558565b9050919050565b60006040820190508181036000830152614aca81614558565b90508181036020830152614ade8184614465565b905092915050565b60006020820190508181036000830152614aff8161458f565b9050919050565b60006040820190508181036000830152614b1f8161458f565b9050614b2e602083018461432b565b92915050565b60006020820190508181036000830152614b4d816145c6565b9050919050565b60006020820190508181036000830152614b6d816145fd565b9050919050565b60006040820190508181036000830152614b8d816145fd565b90508181036020830152614ba1818461442f565b905092915050565b60006020820190508181036000830152614bc281614634565b9050919050565b60006040820190508181036000830152614be281614634565b90508181036020830152614bf6818461442f565b905092915050565b60006020820190508181036000830152614c178161466b565b9050919050565b60006020820190508181036000830152614c37816146a2565b9050919050565b60006040820190508181036000830152614c57816146a2565b90508181036020830152614c6b818461442f565b905092915050565b60006020820190508181036000830152614c8c816146d9565b9050919050565b60006040820190508181036000830152614cac816146d9565b9050614cbb602083018461432b565b92915050565b60006020820190508181036000830152614cda81614710565b9050919050565b60006040820190508181036000830152614cfa81614747565b90508181036020830152614d0e818461442f565b905092915050565b60006020820190508181036000830152614d2f8161477e565b9050919050565b60006040820190508181036000830152614d4f8161477e565b90508181036020830152614d63818461442f565b905092915050565b60006020820190508181036000830152614d84816147b5565b9050919050565b60006020820190508181036000830152614da4816147ec565b9050919050565b60006040820190508181036000830152614dc4816147ec565b9050614dd36020830184614420565b92915050565b60006020820190508181036000830152614df281614823565b9050919050565b60006040820190508181036000830152614e1281614823565b9050614e216020830184614420565b92915050565b60006020820190508181036000830152614e408161485a565b9050919050565b60006040820190508181036000830152614e608161485a565b9050614e6f602083018461432b565b92915050565b60006020820190508181036000830152614e8e81614891565b9050919050565b60006020820190508181036000830152614eae816148c8565b9050919050565b60006040820190508181036000830152614ece816148c8565b90508181036020830152614ee2818461442f565b905092915050565b60006020820190508181036000830152614f03816148ff565b9050919050565b60006040820190508181036000830152614f23816148ff565b90508181036020830152614f378184614465565b905092915050565b6000602082019050614f546000830184614936565b92915050565b600060a082019050614f6f6000830188614936565b614f7c6020830187614936565b614f89604083018661432b565b614f96606083018561432b565b614fa36080830184614936565b9695505050505050565b6000604051905081810181811067ffffffffffffffff82111715614fd057600080fd5b8060405250919050565b600067ffffffffffffffff821115614ff157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561501957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561504157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561506957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561509157600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156150bd57600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b6000819050919050565b60008160005260","206000209050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006151ac82615141565b9050919050565b60006151be82615141565b9050919050565b60006151d082615141565b9050919050565b60006151e282615141565b9050919050565b6000819050919050565b6000819050919050565b600061520882615141565b9050919050565b600061521a82615141565b9050919050565b82818337600083830152505050565b60005b8381101561524e578082015181840152602081019050615233565b8381111561525d576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a723058206bf1aadad9f064d68ba91f54ce2cf16783267c3ca5863cf00874e115768380276c6578706572696d656e74616cf50037"};

    public static final String SM_BINARY = String.join("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {"[{\"constant\":true,\"inputs\":[],\"name\":\"ROLE_R\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"OPENING_BANK\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ROLE_W\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"DATA\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"updateNonce\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"OWNER\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BALANCE\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionAddress\",\"type\":\"address[]\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"typeList\",\"type\":\"int256[]\"},{\"name\":\"detailList\",\"type\":\"string[]\"},{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"deposit\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"uint256[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"key\",\"type\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"insert\",\"outputs\":[{\"name\":\"replaced\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"RECORD\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"uintCondition\",\"type\":\"uint256[]\"},{\"name\":\"addressCondition\",\"type\":\"address[]\"},{\"name\":\"limit\",\"type\":\"int256[]\"},{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"queryBook\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PUB_KEY\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ADMIN\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MODE_R\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TYPE_ADMIN\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TYPE_OWNER\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"key\",\"type\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"add\",\"outputs\":[{\"name\":\"replaced\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"addBook\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOrg\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MODE_W\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"key\",\"type\":\"bytes\"}],\"name\":\"remove\",\"outputs\":[{\"name\":\"replaced\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"OWNER_ADDR\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ASSETS\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"USER_ADDR\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"key\",\"type\":\"bytes\"},{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"removeWithSign\",\"outputs\":[{\"name\":\"replaced\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"USER\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"key\",\"type\":\"bytes\"},{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"getWithSign\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionAddress\",\"type\":\"address[]\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"typeList\",\"type\":\"int256[]\"},{\"name\":\"detailList\",\"type\":\"string[]\"},{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"withdrawal\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"uint256[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"size\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"OPERATOR\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionAddress\",\"type\":\"address[]\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"typeList\",\"type\":\"int256[]\"},{\"name\":\"detailList\",\"type\":\"string[]\"},{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"uint256[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ROLE\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"},{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"getBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"key\",\"type\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"set\",\"outputs\":[{\"name\":\"replaced\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"key\",\"type\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\"},{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"addWithSign\",\"outputs\":[{\"name\":\"replaced\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ADMIN_ADDR\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"getTotalBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAccountManager\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ID\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ADDR\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TYPE_PUBLIC\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"OPERATOR_ADDR\",\"outputs\":[{\"n","ame\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TYPE\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAuthCenter\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAuthManager\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"key\",\"type\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\"},{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"insertWithSign\",\"outputs\":[{\"name\":\"replaced\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionAddress\",\"type\":\"address[]\"}],\"name\":\"checkAndHandleTransactionAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getNonce\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"key\",\"type\":\"bytes\"}],\"name\":\"get\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"getHolders\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"key\",\"type\":\"bytes\"},{\"name\":\"value\",\"type\":\"bytes\"},{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"setWithSign\",\"outputs\":[{\"name\":\"replaced\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"},{\"name\":\"sign\",\"type\":\"bytes32[4]\"}],\"name\":\"openAccount\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"KEY_ALL\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"currencyName\",\"type\":\"string\"},{\"name\":\"currencySymbol\",\"type\":\"string\"},{\"name\":\"_decimals\",\"type\":\"uint8\"},{\"name\":\"authCenterAddr\",\"type\":\"address\"},{\"name\":\"orgAddr\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"WithDrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"termNo\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"seqNo\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"InsertResult\",\"type\":\"event\"}]"};

    public static final String ABI = String.join("", ABI_ARRAY);

    public static final String FUNC_ROLE_R = "ROLE_R";

    public static final String FUNC_OPENING_BANK = "OPENING_BANK";

    public static final String FUNC_NAME = "name";

    public static final String FUNC_ROLE_W = "ROLE_W";

    public static final String FUNC_DATA = "DATA";

    public static final String FUNC_UPDATENONCE = "updateNonce";

    public static final String FUNC_OWNER = "OWNER";

    public static final String FUNC_BALANCE = "BALANCE";

    public static final String FUNC_DEPOSIT = "deposit";

    public static final String FUNC_INSERT = "insert";

    public static final String FUNC_RECORD = "RECORD";

    public static final String FUNC_QUERYBOOK = "queryBook";

    public static final String FUNC_PUB_KEY = "PUB_KEY";

    public static final String FUNC_ADMIN = "ADMIN";

    public static final String FUNC_MODE_R = "MODE_R";

    public static final String FUNC_DECIMALS = "decimals";

    public static final String FUNC_GETADDRESS = "getAddress";

    public static final String FUNC_TYPE_ADMIN = "TYPE_ADMIN";

    public static final String FUNC_TYPE_OWNER = "TYPE_OWNER";

    public static final String FUNC_ADD = "add";

    public static final String FUNC_ADDBOOK = "addBook";

    public static final String FUNC_GETORG = "getOrg";

    public static final String FUNC_MODE_W = "MODE_W";

    public static final String FUNC_REMOVE = "remove";

    public static final String FUNC_OWNER_ADDR = "OWNER_ADDR";

    public static final String FUNC_ASSETS = "ASSETS";

    public static final String FUNC_USER_ADDR = "USER_ADDR";

    public static final String FUNC_REMOVEWITHSIGN = "removeWithSign";

    public static final String FUNC_USER = "USER";

    public static final String FUNC_GETWITHSIGN = "getWithSign";

    public static final String FUNC_WITHDRAWAL = "withdrawal";

    public static final String FUNC_SIZE = "size";

    public static final String FUNC_SYMBOL = "symbol";

    public static final String FUNC_OPERATOR = "OPERATOR";

    public static final String FUNC_TRANSFER = "transfer";

    public static final String FUNC_ROLE = "ROLE";

    public static final String FUNC_GETBALANCE = "getBalance";

    public static final String FUNC_SET = "set";

    public static final String FUNC_ADDWITHSIGN = "addWithSign";

    public static final String FUNC_ADMIN_ADDR = "ADMIN_ADDR";

    public static final String FUNC_GETTOTALBALANCE = "getTotalBalance";

    public static final String FUNC_GETACCOUNTMANAGER = "getAccountManager";

    public static final String FUNC_ID = "ID";

    public static final String FUNC_ADDR = "ADDR";

    public static final String FUNC_TYPE_PUBLIC = "TYPE_PUBLIC";

    public static final String FUNC_OPERATOR_ADDR = "OPERATOR_ADDR";

    public static final String FUNC_TYPE = "TYPE";

    public static final String FUNC_GETAUTHCENTER = "getAuthCenter";

    public static final String FUNC_GETAUTHMANAGER = "getAuthManager";

    public static final String FUNC_INSERTWITHSIGN = "insertWithSign";

    public static final String FUNC_CHECKANDHANDLETRANSACTIONADDRESS = "checkAndHandleTransactionAddress";

    public static final String FUNC_GETNONCE = "getNonce";

    public static final String FUNC_GET = "get";

    public static final String FUNC_GETHOLDERS = "getHolders";

    public static final String FUNC_SETWITHSIGN = "setWithSign";

    public static final String FUNC_OPENACCOUNT = "openAccount";

    public static final String FUNC_KEY_ALL = "KEY_ALL";

    public static final Event TRANSFER_EVENT = new Event("Transfer", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
    ;

    public static final Event DEPOSIT_EVENT = new Event("Deposit", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
    ;

    public static final Event WITHDRAWAL_EVENT = new Event("WithDrawal", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
    ;

    public static final Event INSERTRESULT_EVENT = new Event("InsertResult", 
            Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Address>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}));
    ;

    protected Currency(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public byte[] ROLE_R() throws ContractException {
        final Function function = new Function(FUNC_ROLE_R, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public byte[] OPENING_BANK() throws ContractException {
        final Function function = new Function(FUNC_OPENING_BANK, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public String name() throws ContractException {
        final Function function = new Function(FUNC_NAME, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public byte[] ROLE_W() throws ContractException {
        final Function function = new Function(FUNC_ROLE_W, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public byte[] DATA() throws ContractException {
        final Function function = new Function(FUNC_DATA, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public TransactionReceipt updateNonce() {
        final Function function = new Function(
                FUNC_UPDATENONCE, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void updateNonce(TransactionCallback callback) {
        final Function function = new Function(
                FUNC_UPDATENONCE, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUpdateNonce() {
        final Function function = new Function(
                FUNC_UPDATENONCE, 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<BigInteger> getUpdateNonceOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_UPDATENONCE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public byte[] OWNER() throws ContractException {
        final Function function = new Function(FUNC_OWNER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public byte[] BALANCE() throws ContractException {
        final Function function = new Function(FUNC_BALANCE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public TransactionReceipt deposit(List<String> transactionAddress, BigInteger amount, List<BigInteger> typeList, List<String> detailList, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_DEPOSIT, 
                Arrays.<Type>asList(transactionAddress.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(transactionAddress, Address.class)),
                new Uint256(amount),
                typeList.isEmpty()? DynamicArray.empty("int256[]"):new DynamicArray<Int256>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(typeList, Int256.class)),
                detailList.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(detailList, Utf8String.class)),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void deposit(List<String> transactionAddress, BigInteger amount, List<BigInteger> typeList, List<String> detailList, List<byte[]> sign, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_DEPOSIT, 
                Arrays.<Type>asList(transactionAddress.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(transactionAddress, Address.class)),
                new Uint256(amount),
                typeList.isEmpty()? DynamicArray.empty("int256[]"):new DynamicArray<Int256>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(typeList, Int256.class)),
                detailList.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(detailList, Utf8String.class)),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForDeposit(List<String> transactionAddress, BigInteger amount, List<BigInteger> typeList, List<String> detailList, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_DEPOSIT, 
                Arrays.<Type>asList(transactionAddress.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(transactionAddress, Address.class)),
                new Uint256(amount),
                typeList.isEmpty()? DynamicArray.empty("int256[]"):new DynamicArray<Int256>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(typeList, Int256.class)),
                detailList.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(detailList, Utf8String.class)),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple5<List<String>, BigInteger, List<BigInteger>, List<String>, List<byte[]>> getDepositInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_DEPOSIT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}, new TypeReference<Uint256>() {}, new TypeReference<DynamicArray<Int256>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<StaticArray4<Bytes32>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple5<List<String>, BigInteger, List<BigInteger>, List<String>, List<byte[]>>(

                convertToNative((List<Address>) results.get(0).getValue()), 
                (BigInteger) results.get(1).getValue(), 
                convertToNative((List<Int256>) results.get(2).getValue()), 
                convertToNative((List<Utf8String>) results.get(3).getValue()), 
                convertToNative((List<Bytes32>) results.get(4).getValue())
                );
    }

    public Tuple2<Boolean, List<BigInteger>> getDepositOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_DEPOSIT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}, new TypeReference<StaticArray2<Uint256>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<Boolean, List<BigInteger>>(

                (Boolean) results.get(0).getValue(), 
                convertToNative((List<Uint256>) results.get(1).getValue())
                );
    }

    public TransactionReceipt insert(byte[] key, byte[] value) {
        final Function function = new Function(
                FUNC_INSERT, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void insert(byte[] key, byte[] value, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_INSERT, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForInsert(byte[] key, byte[] value) {
        final Function function = new Function(
                FUNC_INSERT, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<byte[], byte[]> getInsertInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_INSERT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}, new TypeReference<DynamicBytes>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<byte[], byte[]>(

                (byte[]) results.get(0).getValue(), 
                (byte[]) results.get(1).getValue()
                );
    }

    public Tuple1<Boolean> getInsertOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_INSERT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<Boolean>(

                (Boolean) results.get(0).getValue()
                );
    }

    public byte[] RECORD() throws ContractException {
        final Function function = new Function(FUNC_RECORD, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public List queryBook(List<BigInteger> uintCondition, List<String> addressCondition, List<BigInteger> limit, List<byte[]> sign) throws ContractException {
        final Function function = new Function(FUNC_QUERYBOOK, 
                Arrays.<Type>asList(uintCondition.isEmpty()? DynamicArray.empty("uint256[]"):new DynamicArray<Uint256>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(uintCondition, Uint256.class)),
                addressCondition.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(addressCondition, Address.class)),
                limit.isEmpty()? DynamicArray.empty("int256[]"):new DynamicArray<Int256>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(limit, Int256.class)),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public byte[] PUB_KEY() throws ContractException {
        final Function function = new Function(FUNC_PUB_KEY, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public byte[] ADMIN() throws ContractException {
        final Function function = new Function(FUNC_ADMIN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public byte[] MODE_R() throws ContractException {
        final Function function = new Function(FUNC_MODE_R, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public BigInteger decimals() throws ContractException {
        final Function function = new Function(FUNC_DECIMALS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public String getAddress() throws ContractException {
        final Function function = new Function(FUNC_GETADDRESS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public byte[] TYPE_ADMIN() throws ContractException {
        final Function function = new Function(FUNC_TYPE_ADMIN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public byte[] TYPE_OWNER() throws ContractException {
        final Function function = new Function(FUNC_TYPE_OWNER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public TransactionReceipt add(byte[] key, byte[] value) {
        final Function function = new Function(
                FUNC_ADD, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void add(byte[] key, byte[] value, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADD, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAdd(byte[] key, byte[] value) {
        final Function function = new Function(
                FUNC_ADD, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<byte[], byte[]> getAddInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADD, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}, new TypeReference<DynamicBytes>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<byte[], byte[]>(

                (byte[]) results.get(0).getValue(), 
                (byte[]) results.get(1).getValue()
                );
    }

    public Tuple1<Boolean> getAddOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_ADD, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<Boolean>(

                (Boolean) results.get(0).getValue()
                );
    }

    public TransactionReceipt addBook(List<byte[]> sign) {
        final Function function = new Function(
                FUNC_ADDBOOK, 
                Arrays.<Type>asList(new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void addBook(List<byte[]> sign, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDBOOK, 
                Arrays.<Type>asList(new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddBook(List<byte[]> sign) {
        final Function function = new Function(
                FUNC_ADDBOOK, 
                Arrays.<Type>asList(new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<List<byte[]>> getAddBookInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDBOOK, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<StaticArray4<Bytes32>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<byte[]>>(

                convertToNative((List<Bytes32>) results.get(0).getValue())
                );
    }

    public Tuple1<BigInteger> getAddBookOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_ADDBOOK, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<BigInteger>(

                (BigInteger) results.get(0).getValue()
                );
    }

    public String getOrg() throws ContractException {
        final Function function = new Function(FUNC_GETORG, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public byte[] MODE_W() throws ContractException {
        final Function function = new Function(FUNC_MODE_W, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public TransactionReceipt remove(byte[] key) {
        final Function function = new Function(
                FUNC_REMOVE, 
                Arrays.<Type>asList(new DynamicBytes(key)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void remove(byte[] key, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REMOVE, 
                Arrays.<Type>asList(new DynamicBytes(key)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRemove(byte[] key) {
        final Function function = new Function(
                FUNC_REMOVE, 
                Arrays.<Type>asList(new DynamicBytes(key)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<byte[]> getRemoveInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REMOVE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<byte[]>(

                (byte[]) results.get(0).getValue()
                );
    }

    public Tuple1<Boolean> getRemoveOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_REMOVE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<Boolean>(

                (Boolean) results.get(0).getValue()
                );
    }

    public String OWNER_ADDR() throws ContractException {
        final Function function = new Function(FUNC_OWNER_ADDR, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public byte[] ASSETS() throws ContractException {
        final Function function = new Function(FUNC_ASSETS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public String USER_ADDR() throws ContractException {
        final Function function = new Function(FUNC_USER_ADDR, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public TransactionReceipt removeWithSign(byte[] key, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_REMOVEWITHSIGN, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void removeWithSign(byte[] key, List<byte[]> sign, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_REMOVEWITHSIGN, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRemoveWithSign(byte[] key, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_REMOVEWITHSIGN, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<byte[], List<byte[]>> getRemoveWithSignInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_REMOVEWITHSIGN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}, new TypeReference<StaticArray4<Bytes32>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<byte[], List<byte[]>>(

                (byte[]) results.get(0).getValue(), 
                convertToNative((List<Bytes32>) results.get(1).getValue())
                );
    }

    public Tuple1<Boolean> getRemoveWithSignOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_REMOVEWITHSIGN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<Boolean>(

                (Boolean) results.get(0).getValue()
                );
    }

    public byte[] USER() throws ContractException {
        final Function function = new Function(FUNC_USER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public byte[] getWithSign(byte[] key, List<byte[]> sign) throws ContractException {
        final Function function = new Function(FUNC_GETWITHSIGN, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public TransactionReceipt withdrawal(List<String> transactionAddress, BigInteger amount, List<BigInteger> typeList, List<String> detailList, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_WITHDRAWAL, 
                Arrays.<Type>asList(transactionAddress.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(transactionAddress, Address.class)),
                new Uint256(amount),
                typeList.isEmpty()? DynamicArray.empty("int256[]"):new DynamicArray<Int256>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(typeList, Int256.class)),
                detailList.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(detailList, Utf8String.class)),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void withdrawal(List<String> transactionAddress, BigInteger amount, List<BigInteger> typeList, List<String> detailList, List<byte[]> sign, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_WITHDRAWAL, 
                Arrays.<Type>asList(transactionAddress.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(transactionAddress, Address.class)),
                new Uint256(amount),
                typeList.isEmpty()? DynamicArray.empty("int256[]"):new DynamicArray<Int256>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(typeList, Int256.class)),
                detailList.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(detailList, Utf8String.class)),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForWithdrawal(List<String> transactionAddress, BigInteger amount, List<BigInteger> typeList, List<String> detailList, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_WITHDRAWAL, 
                Arrays.<Type>asList(transactionAddress.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(transactionAddress, Address.class)),
                new Uint256(amount),
                typeList.isEmpty()? DynamicArray.empty("int256[]"):new DynamicArray<Int256>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(typeList, Int256.class)),
                detailList.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(detailList, Utf8String.class)),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple5<List<String>, BigInteger, List<BigInteger>, List<String>, List<byte[]>> getWithdrawalInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_WITHDRAWAL, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}, new TypeReference<Uint256>() {}, new TypeReference<DynamicArray<Int256>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<StaticArray4<Bytes32>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple5<List<String>, BigInteger, List<BigInteger>, List<String>, List<byte[]>>(

                convertToNative((List<Address>) results.get(0).getValue()), 
                (BigInteger) results.get(1).getValue(), 
                convertToNative((List<Int256>) results.get(2).getValue()), 
                convertToNative((List<Utf8String>) results.get(3).getValue()), 
                convertToNative((List<Bytes32>) results.get(4).getValue())
                );
    }

    public Tuple2<Boolean, List<BigInteger>> getWithdrawalOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_WITHDRAWAL, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}, new TypeReference<StaticArray2<Uint256>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<Boolean, List<BigInteger>>(

                (Boolean) results.get(0).getValue(), 
                convertToNative((List<Uint256>) results.get(1).getValue())
                );
    }

    public BigInteger size() throws ContractException {
        final Function function = new Function(FUNC_SIZE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public String symbol() throws ContractException {
        final Function function = new Function(FUNC_SYMBOL, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public byte[] OPERATOR() throws ContractException {
        final Function function = new Function(FUNC_OPERATOR, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public TransactionReceipt transfer(List<String> transactionAddress, BigInteger amount, List<BigInteger> typeList, List<String> detailList, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_TRANSFER, 
                Arrays.<Type>asList(transactionAddress.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(transactionAddress, Address.class)),
                new Uint256(amount),
                typeList.isEmpty()? DynamicArray.empty("int256[]"):new DynamicArray<Int256>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(typeList, Int256.class)),
                detailList.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(detailList, Utf8String.class)),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void transfer(List<String> transactionAddress, BigInteger amount, List<BigInteger> typeList, List<String> detailList, List<byte[]> sign, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_TRANSFER, 
                Arrays.<Type>asList(transactionAddress.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(transactionAddress, Address.class)),
                new Uint256(amount),
                typeList.isEmpty()? DynamicArray.empty("int256[]"):new DynamicArray<Int256>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(typeList, Int256.class)),
                detailList.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(detailList, Utf8String.class)),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForTransfer(List<String> transactionAddress, BigInteger amount, List<BigInteger> typeList, List<String> detailList, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_TRANSFER, 
                Arrays.<Type>asList(transactionAddress.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(transactionAddress, Address.class)),
                new Uint256(amount),
                typeList.isEmpty()? DynamicArray.empty("int256[]"):new DynamicArray<Int256>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(typeList, Int256.class)),
                detailList.isEmpty()? DynamicArray.empty("string[]"):new DynamicArray<Utf8String>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(detailList, Utf8String.class)),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple5<List<String>, BigInteger, List<BigInteger>, List<String>, List<byte[]>> getTransferInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_TRANSFER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}, new TypeReference<Uint256>() {}, new TypeReference<DynamicArray<Int256>>() {}, new TypeReference<DynamicArray<Utf8String>>() {}, new TypeReference<StaticArray4<Bytes32>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple5<List<String>, BigInteger, List<BigInteger>, List<String>, List<byte[]>>(

                convertToNative((List<Address>) results.get(0).getValue()), 
                (BigInteger) results.get(1).getValue(), 
                convertToNative((List<Int256>) results.get(2).getValue()), 
                convertToNative((List<Utf8String>) results.get(3).getValue()), 
                convertToNative((List<Bytes32>) results.get(4).getValue())
                );
    }

    public Tuple2<Boolean, List<BigInteger>> getTransferOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_TRANSFER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}, new TypeReference<StaticArray2<Uint256>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<Boolean, List<BigInteger>>(

                (Boolean) results.get(0).getValue(), 
                convertToNative((List<Uint256>) results.get(1).getValue())
                );
    }

    public byte[] ROLE() throws ContractException {
        final Function function = new Function(FUNC_ROLE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public BigInteger getBalance(String account, List<byte[]> sign) throws ContractException {
        final Function function = new Function(FUNC_GETBALANCE, 
                Arrays.<Type>asList(new Address(account),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public TransactionReceipt set(byte[] key, byte[] value) {
        final Function function = new Function(
                FUNC_SET, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value)),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void set(byte[] key, byte[] value, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_SET, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value)),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForSet(byte[] key, byte[] value) {
        final Function function = new Function(
                FUNC_SET, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value)),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<byte[], byte[]> getSetInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_SET, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}, new TypeReference<DynamicBytes>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<byte[], byte[]>(

                (byte[]) results.get(0).getValue(), 
                (byte[]) results.get(1).getValue()
                );
    }

    public Tuple1<Boolean> getSetOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_SET, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<Boolean>(

                (Boolean) results.get(0).getValue()
                );
    }

    public TransactionReceipt addWithSign(byte[] key, byte[] value, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_ADDWITHSIGN, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void addWithSign(byte[] key, byte[] value, List<byte[]> sign, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_ADDWITHSIGN, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddWithSign(byte[] key, byte[] value, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_ADDWITHSIGN, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<byte[], byte[], List<byte[]>> getAddWithSignInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_ADDWITHSIGN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}, new TypeReference<DynamicBytes>() {}, new TypeReference<StaticArray4<Bytes32>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<byte[], byte[], List<byte[]>>(

                (byte[]) results.get(0).getValue(), 
                (byte[]) results.get(1).getValue(), 
                convertToNative((List<Bytes32>) results.get(2).getValue())
                );
    }

    public Tuple1<Boolean> getAddWithSignOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_ADDWITHSIGN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<Boolean>(

                (Boolean) results.get(0).getValue()
                );
    }

    public String ADMIN_ADDR() throws ContractException {
        final Function function = new Function(FUNC_ADMIN_ADDR, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public BigInteger getTotalBalance(List<byte[]> sign) throws ContractException {
        final Function function = new Function(FUNC_GETTOTALBALANCE, 
                Arrays.<Type>asList(new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public String getAccountManager() throws ContractException {
        final Function function = new Function(FUNC_GETACCOUNTMANAGER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public byte[] ID() throws ContractException {
        final Function function = new Function(FUNC_ID, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public byte[] ADDR() throws ContractException {
        final Function function = new Function(FUNC_ADDR, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public byte[] TYPE_PUBLIC() throws ContractException {
        final Function function = new Function(FUNC_TYPE_PUBLIC, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public String OPERATOR_ADDR() throws ContractException {
        final Function function = new Function(FUNC_OPERATOR_ADDR, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public byte[] TYPE() throws ContractException {
        final Function function = new Function(FUNC_TYPE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public String getAuthCenter() throws ContractException {
        final Function function = new Function(FUNC_GETAUTHCENTER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public String getAuthManager() throws ContractException {
        final Function function = new Function(FUNC_GETAUTHMANAGER, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public TransactionReceipt insertWithSign(byte[] key, byte[] value, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_INSERTWITHSIGN, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void insertWithSign(byte[] key, byte[] value, List<byte[]> sign, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_INSERTWITHSIGN, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForInsertWithSign(byte[] key, byte[] value, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_INSERTWITHSIGN, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<byte[], byte[], List<byte[]>> getInsertWithSignInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_INSERTWITHSIGN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}, new TypeReference<DynamicBytes>() {}, new TypeReference<StaticArray4<Bytes32>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<byte[], byte[], List<byte[]>>(

                (byte[]) results.get(0).getValue(), 
                (byte[]) results.get(1).getValue(), 
                convertToNative((List<Bytes32>) results.get(2).getValue())
                );
    }

    public Tuple1<Boolean> getInsertWithSignOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_INSERTWITHSIGN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<Boolean>(

                (Boolean) results.get(0).getValue()
                );
    }

    public TransactionReceipt checkAndHandleTransactionAddress(List<String> transactionAddress) {
        final Function function = new Function(
                FUNC_CHECKANDHANDLETRANSACTIONADDRESS, 
                Arrays.<Type>asList(transactionAddress.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(transactionAddress, Address.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void checkAndHandleTransactionAddress(List<String> transactionAddress, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_CHECKANDHANDLETRANSACTIONADDRESS, 
                Arrays.<Type>asList(transactionAddress.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(transactionAddress, Address.class))),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForCheckAndHandleTransactionAddress(List<String> transactionAddress) {
        final Function function = new Function(
                FUNC_CHECKANDHANDLETRANSACTIONADDRESS, 
                Arrays.<Type>asList(transactionAddress.isEmpty()? DynamicArray.empty("address[]"):new DynamicArray<Address>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(transactionAddress, Address.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple1<List<String>> getCheckAndHandleTransactionAddressInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_CHECKANDHANDLETRANSACTIONADDRESS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<String>>(

                convertToNative((List<Address>) results.get(0).getValue())
                );
    }

    public Tuple2<Boolean, List<String>> getCheckAndHandleTransactionAddressOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_CHECKANDHANDLETRANSACTIONADDRESS, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}, new TypeReference<DynamicArray<Address>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<Boolean, List<String>>(

                (Boolean) results.get(0).getValue(), 
                convertToNative((List<Address>) results.get(1).getValue())
                );
    }

    public BigInteger getNonce() throws ContractException {
        final Function function = new Function(FUNC_GETNONCE, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public byte[] get(byte[] key) throws ContractException {
        final Function function = new Function(FUNC_GET, 
                Arrays.<Type>asList(new DynamicBytes(key)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public List getHolders(List<byte[]> sign) throws ContractException {
        final Function function = new Function(FUNC_GETHOLDERS, 
                Arrays.<Type>asList(new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Address>>() {}));
        List<Type> result = (List<Type>) executeCallWithSingleValueReturn(function, List.class);
        return convertToNative(result);
    }

    public TransactionReceipt setWithSign(byte[] key, byte[] value, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_SETWITHSIGN, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void setWithSign(byte[] key, byte[] value, List<byte[]> sign, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_SETWITHSIGN, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForSetWithSign(byte[] key, byte[] value, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_SETWITHSIGN, 
                Arrays.<Type>asList(new DynamicBytes(key),
                new DynamicBytes(value),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple3<byte[], byte[], List<byte[]>> getSetWithSignInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_SETWITHSIGN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}, new TypeReference<DynamicBytes>() {}, new TypeReference<StaticArray4<Bytes32>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<byte[], byte[], List<byte[]>>(

                (byte[]) results.get(0).getValue(), 
                (byte[]) results.get(1).getValue(), 
                convertToNative((List<Bytes32>) results.get(2).getValue())
                );
    }

    public Tuple1<Boolean> getSetWithSignOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_SETWITHSIGN, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<Boolean>(

                (Boolean) results.get(0).getValue()
                );
    }

    public TransactionReceipt openAccount(String account, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_OPENACCOUNT, 
                Arrays.<Type>asList(new Address(account),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeTransaction(function);
    }

    public void openAccount(String account, List<byte[]> sign, TransactionCallback callback) {
        final Function function = new Function(
                FUNC_OPENACCOUNT, 
                Arrays.<Type>asList(new Address(account),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForOpenAccount(String account, List<byte[]> sign) {
        final Function function = new Function(
                FUNC_OPENACCOUNT, 
                Arrays.<Type>asList(new Address(account),
                new StaticArray4<Bytes32>(
                        org.fisco.bcos.sdk.abi.Utils.typeMap(sign, Bytes32.class))),
                Collections.<TypeReference<?>>emptyList());
        return createSignedTransaction(function);
    }

    public Tuple2<String, List<byte[]>> getOpenAccountInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function = new Function(FUNC_OPENACCOUNT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<StaticArray4<Bytes32>>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<String, List<byte[]>>(

                (String) results.get(0).getValue(), 
                convertToNative((List<Bytes32>) results.get(1).getValue())
                );
    }

    public Tuple1<Boolean> getOpenAccountOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function = new Function(FUNC_OPENACCOUNT, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        List<Type> results = FunctionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<Boolean>(

                (Boolean) results.get(0).getValue()
                );
    }

    public byte[] KEY_ALL() throws ContractException {
        final Function function = new Function(FUNC_KEY_ALL, 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicBytes>() {}));
        return executeCallWithSingleValueReturn(function, byte[].class);
    }

    public List<TransferEventResponse> getTransferEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(TRANSFER_EVENT, transactionReceipt);
        ArrayList<TransferEventResponse> responses = new ArrayList<TransferEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            TransferEventResponse typedResponse = new TransferEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse._from = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse._to = (String) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeTransferEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(TRANSFER_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeTransferEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(TRANSFER_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<DepositEventResponse> getDepositEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(DEPOSIT_EVENT, transactionReceipt);
        ArrayList<DepositEventResponse> responses = new ArrayList<DepositEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            DepositEventResponse typedResponse = new DepositEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeDepositEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(DEPOSIT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeDepositEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(DEPOSIT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<WithDrawalEventResponse> getWithDrawalEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(WITHDRAWAL_EVENT, transactionReceipt);
        ArrayList<WithDrawalEventResponse> responses = new ArrayList<WithDrawalEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            WithDrawalEventResponse typedResponse = new WithDrawalEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeWithDrawalEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(WITHDRAWAL_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeWithDrawalEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(WITHDRAWAL_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public List<InsertResultEventResponse> getInsertResultEvents(TransactionReceipt transactionReceipt) {
        List<EventValuesWithLog> valueList = extractEventParametersWithLog(INSERTRESULT_EVENT, transactionReceipt);
        ArrayList<InsertResultEventResponse> responses = new ArrayList<InsertResultEventResponse>(valueList.size());
        for (EventValuesWithLog eventValues : valueList) {
            InsertResultEventResponse typedResponse = new InsertResultEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.termNo = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.seqNo = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.from = (String) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.to = (String) eventValues.getNonIndexedValues().get(3).getValue();
            typedResponse.amount = (BigInteger) eventValues.getNonIndexedValues().get(4).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public void subscribeInsertResultEvent(String fromBlock, String toBlock, List<String> otherTopics, EventCallback callback) {
        String topic0 = eventEncoder.encode(INSERTRESULT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,fromBlock,toBlock,otherTopics,callback);
    }

    public void subscribeInsertResultEvent(EventCallback callback) {
        String topic0 = eventEncoder.encode(INSERTRESULT_EVENT);
        subscribeEvent(ABI,BINARY,topic0,callback);
    }

    public static Currency load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new Currency(contractAddress, client, credential);
    }

    public static Currency deploy(Client client, CryptoKeyPair credential, String currencyName, String currencySymbol, BigInteger _decimals, String authCenterAddr, String orgAddr) throws ContractException {
        String encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.<Type>asList(new Utf8String(currencyName),
                new Utf8String(currencySymbol),
                new Uint8(_decimals),
                new Address(authCenterAddr),
                new Address(orgAddr)));
        return deploy(Currency.class, client, credential, getBinary(client.getCryptoSuite()), encodedConstructor);
    }

    public static class TransferEventResponse {
        public TransactionReceipt.Logs log;

        public String _from;

        public String _to;

        public BigInteger amount;
    }

    public static class DepositEventResponse {
        public TransactionReceipt.Logs log;

        public String account;

        public BigInteger amount;
    }

    public static class WithDrawalEventResponse {
        public TransactionReceipt.Logs log;

        public String account;

        public BigInteger amount;
    }

    public static class InsertResultEventResponse {
        public TransactionReceipt.Logs log;

        public BigInteger termNo;

        public BigInteger seqNo;

        public String from;

        public String to;

        public BigInteger amount;
    }
}
